2012-01-06 17 views
6

Çevre:. Visual Studio 2010 Professional .NET Framework 4 C#/WSDL kullanarak NET Çözüm (SOAP)

Eklendi Servis Başvurusu aşağıdaki WSDL kullanarak: https://www.paypalobjects.com/wsdl/PayPalSvc.wsdl

Sorun 1: Böyle basit bir şekilde derlendiğinde, Reference.cs dosyasından bir sürü hata alın. Ad alanı hataları gibi görünüyor. Projemizin Ad Alanı'ndaki Hizmet Referans Ad alanını bulamadığını belirtiyor. Bu nedenle, Reference.cs dosyasına girdim ve bu hatayı aldığım her yerde, proje adlarından önce projenin ad alanını kaldırdım ve şimdi derler. Son olarak tüm sınıflara erişim elde edilir. Gerekli özelliklere sahip DoDirectPaymentReq ve CustomSecurityHeader nesneleri oluşturulmuş ve doldurulmuştur. CustomSecurityHeader ve DoDirectPaymentReq türündeki argümanları alan DoDirectPayment yöntemini içeren bir PayPalAPIAAInterfaceClient sınıfı örneği oluşturuldu. Bugüne kadar ben içmedim nedenle

System.InvalidOperationException: Could not find default endpoint element that references contract 'Paypal.PayPalAPIAAInterface' in the ServiceModel client configuration section. This might be because no configuration file was found for your application, or because no endpoint element matching this contract could be found in the client element. 

at System.ServiceModel.Description.ConfigLoader.LoadChannelBehaviors(ServiceEndpoint serviceEndpoint, String configurationName) 
at System.ServiceModel.ChannelFactory.ApplyConfiguration(String configurationName, Configuration configuration) 
at System.ServiceModel.ChannelFactory.ApplyConfiguration(String configurationName) 
at System.ServiceModel.ChannelFactory.InitializeEndpoint(String configurationName, EndpointAddress address) 
at System.ServiceModel.ChannelFactory`1..ctor(String endpointConfigurationName, EndpointAddress remoteAddress) 
at System.ServiceModel.EndpointTrait`1.CreateSimplexFactory() 
at System.ServiceModel.ClientBase`1.CreateChannelFactoryRef(EndpointTrait`1 endpointTrait) 
at System.ServiceModel.ClientBase`1.InitializeChannelFactoryRef() 
at System.ServiceModel.ClientBase`1..ctor() 
at PaymentEngine.Paypal.PayPalAPIAAInterfaceClient..ctor() in Reference.cs: line 30063 

: 2

using (var client = new **PayPalAPIAAInterfaceClient**()) 
{ 
    var credentials = new CustomSecurityHeaderType 
    { 
     Credentials = new UserIdPasswordType 
     { 
     Username = "[email protected]", 
     Password = "xxxxxxx", 
     Signature = "jksadfuhasfweakjhasf" 
     } 
    }; 

    _doDirectPaymentResponseType = client.DoDirectPayment(ref credentials, _doDirectPaymentReq); 
} 

Sorun: şu şekildedir: Yukarıdaki kod içeren yöntemi için bir TestMethod yazdıktan sonra, hatayı alıyorum bu gibi görünüyor C# içinde WSDL kullanarak PayPal SOAP protokolünü kullanarak başarılı bir işlem yapabildi.

Bunun çok basit olduğu izlenimi altındaydım. Basitçe Hizmet Başvurusu Ekleme ve WSDL'den proxy'de oluşturulan özellikleri ve yöntemleri ile Sınıfları kullanın.

Neredeler?

Yanlış WSDL kullanıyor muyum? Önce Sandbox'a karşı test yapmak ve daha sonra Live'a gitmek istiyorum.

Birazdan WSDL ile beraberim Eğer

, ben onun zaten orada WSDL tanımında başlangıcı elle ayarlamak isteyip varsayalım ediyorsam bilmiyorum hangi son noktaya
, bilmiyor sınıf PayPalAPIAAInterfaceClient benziyor son (check it out). Sınıfın, CustomSecurityHeaderType'ı doldurmak için İmzası veya Sertifikayı kullanıp kullanmadığına bağlı olarak hangi uç noktanın gerektiğini bilmesi gerektiğini düşünüyorum.

Ancak PayPalAPIAAInterfaceClient sınıfı Sandbox'a (test) bakmaya çalıştığımı veya canlı bir işlem olup olmadığını nasıl anlar?

PayPal, Sandbox ve Live için iki farklı WSDL'ye sahipti. Onlar burada bulabilirsiniz: - geliştirici/e_howto_api_soap_PayPalSOAPAPIArchitecture

desteklerinden görüştükten sonra ben https://cms.paypal.com/us/cgi-bin/?cmd=_render-content & CONTENT_ID = > oldu Sandbox ve Live: ->https://www.paypalobjects.com/wsdl/PayPalSvc için aşağıdaki WSDL'yi kullanması istenmiştir.wsdl

Canlı veya Sandbox testleri gerçekleştirmeyi düşündüğümüzde PayPalAPIAAInterfaceClient sınıfına nasıl söyleyebilirim. Ayrıca, SOAP ve İmzam metoduna bağlı olarak hangi son noktayı kullanacağım. PayPal bitiş noktaları burada bahsedilmektedir:

https://cms.paypal.com/us/cgi-bin/?cmd=_render-content&content_ID=developer/howto_api_endpoints

YARDIM!

cevap

6

Burada bir kaç probleminiz var, ancak hiçbiri çözmek için çok acı verici olmamalı. Her şeyden önce, WSDL'ye bir Hizmet Başvurusu eklediğimde, postanızın en üstünde bağlantı kurduğunuzda, tanımladığınız ad alanlarıyla ilgili herhangi bir sorunum yok. Kendi ad alanlarınız/referanslarınız otomatik olarak oluşturulan terimlerle bir şekilde çakışıyor olabilir veya belki de referans ekleme işlemi sırasında bazı garip seçenekler belirlediniz mi? Bir silme ve yeniden ekleme, sorunu çözebilir veya sanırım zaten çalışmış olduğunuzdan bunu görmezden gelebilirsiniz. (Bu, otomatik olarak oluşturulan kodu düzenlemek için bir güçlüktür, ancak, sonuçta bir düzeltmeyi planlamanız gerekir.)

InvalidOperationException'u çözümlemek için, Visual Studio'nun otomatik olarak oluşturduğu uç noktalardan birini belirtmeniz gerekebilir. app.config dosyanıza eklendi. Eğer Yapılandırma dosyasında böyle bir şey olmalıdır:

<system.serviceModel> 
    <client> 
    <endpoint name="PayPalAPI" ... /> 
    <endpoint name="PayPalAPIAA" ... /> 
    </client> 
</system.serviceModel> 

Sen vekil sınıfının yapıcısı istediğiniz noktanın adı geçebilir. Bu sorunu çözmek için other options vardır, ancak sadece bir son nokta belirtmek kolay ve temiz. (Not: config dosyanızda bu bölüme sahip değilseniz, Servis Ekle fazında bir hata oluştu. Tekrar projenizi sıfırlamayı ve referansı tekrar eklemenizi öneririm.)

Son olarak , IDisposable olmasına rağmen proxy sınıfını kullandığınızda bir using bloğu kullanmak istemezsiniz. Temel olarak, there's a design bug in WCF.

+0

OMG !!! Ne kadar aptalım! Neden app.config dosyasına bakmadım! İŞE YARADI !! TEŞEKKÜRLER TEŞEKKÜRLER TEŞEKKÜRLER! Yine de Paypal'dan "Versiyon Destekli Değil" hatası alıyorum. – dparkar

+1

Sürüm desteklenmiyor, SOAP isteğinde doğru sürümü göndererek çözülebilir: en son sürüm şu an 84.0'dir. – Robert

+0

Teşekkürler Robert! Bu çok çalıştı :) – dparkar

1

Aynı problemi yaşadım çünkü ünite testi yapıyordum.

application.config dosyasını test projesine kopyalamanız gerekir, aksi halde WCF yapılandırmasını bulamaz.