2011-01-05 18 views
8

Aynı WCF hizmetinde SOAP ve RESTful olmaya çalışıyorum. Bir meseleden ayrı olarak bunu başardım. Ben son noktalarını varsaSOAP, JSON ve POX aynı şekilde etkin wcf

<service behaviorConfiguration="webBehaviour" name="MyServices"> 
     <clear /> 
     <endpoint address="" binding="basicHttpBinding" bindingConfiguration="basicHttp" 
     name="basicHttpBinding" contract="DJSharedServices.IMyServices" /> 
     <endpoint address="ws" binding="wsHttpBinding" bindingConfiguration="WsHttp" 
      name="wsHttpBinding" contract="DJSharedServices.IMyServices" /> 
     <endpoint address="web" binding="webHttpBinding" bindingConfiguration="WebHttp" behaviorConfiguration="webBehavior" 
      name="webHttpBinding" contract="DJSharedServices.IMyServices" /> 
     <endpoint address="json" binding="webHttpBinding" bindingConfiguration="WebHttp" behaviorConfiguration="webJSONBehavior" 
      name="webJSONHttpBinding" contract="DJSharedServices.ISharedServices" /> 
     <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" name="mexBinding" />   
     </service>  
    </services> 

aşağıdaki hatayı veriyor: Aşağıdaki benim web.config olduğunu ben json bitiş noktasını dışarı yorum yaparsanız

An ExceptionDetail, likely created by IncludeExceptionDetailInFaults=true, whose value is: 
System.NullReferenceException: Object reference not set to an instance of an object. 
    at System.ServiceModel.Description.WsdlExporter.CreateWsdlBindingAndPort(ServiceEndpoint endpoint, XmlQualifiedName wsdlServiceQName, Port& wsdlPort, Boolean& newBinding, Boolean& bindingNameWasUniquified) 
    at System.ServiceModel.Description.WsdlExporter.ExportEndpoint(ServiceEndpoint endpoint, XmlQualifiedName wsdlServiceQName) 
    at System.ServiceModel.Description.WsdlExporter.ExportEndpoints(IEnumerable`1 endpoints, XmlQualifiedName wsdlServiceQName) 
    at System.ServiceModel.Description.ServiceMetadataBehavior.MetadataExtensionInitializer.GenerateMetadata() 
    at System.ServiceModel.Description.ServiceMetadataExtension.EnsureInitialized() 
    at System.ServiceModel.Description.ServiceMetadataExtension.HttpGetImpl.InitializationData.InitializeFrom(ServiceMetadataExtension extension) 
    at System.ServiceModel.Description.ServiceMetadataExtension.HttpGetImpl.GetInitData() 
    at System.ServiceModel.Description.ServiceMetadataExtension.HttpGetImpl.TryHandleDocumentationRequest(Message httpGetRequest, String[] queries, Message& replyMessage) 
    at System.ServiceModel.Description.ServiceMetadataExtension.HttpGetImpl.ProcessHttpRequest(Message httpGetRequest) 
    at System.ServiceModel.Description.ServiceMetadataExtension.HttpGetImpl.Get(Message message) 
    at SyncInvokeGet(Object , Object[] , Object[]) 
    at System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance, Object[] inputs, Object[]& outputs) 
    at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& rpc) 
    at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc& rpc) 
    at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage41(MessageRpc& rpc) 
    at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage4(MessageRpc& rpc) 
    at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31(MessageRpc& rpc) 
    at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage3(MessageRpc& rpc) 
    at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage2(MessageRpc& rpc) 
    at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage11(MessageRpc& rpc) 
    at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage1(MessageRpc& rpc) 
    at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet) 

şeyler iyi çalışır.

Neden olduğunu anlamama yardımcı olabilir misiniz ??

Şimdiden teşekkürler.

cevap

12

iyi ekledim json davranışı için bağlayıcı yapılandırmasını değiştirdim. JSON ve POX için aynı bing konfigürasyonunu kullanıyordum. Şimdi yapılandırmayı değişti:

<service behaviorConfiguration="WebBehaviour" name="MyServices"> 
     <clear /> 
     <endpoint address="" binding="basicHttpBinding" bindingConfiguration="basicHttp" 
     name="basicHttpBinding" contract="DJSharedServices.IMyServices" /> 
     <endpoint address="ws" binding="wsHttpBinding" bindingConfiguration="WsHttp" 
      name="wsHttpBinding" contract="DJSharedServices.IMyServices" /> 
     <endpoint address="web" binding="webHttpBinding" bindingConfiguration="WebHttp" behaviorConfiguration="webBehavior" 
      name="webHttpBinding" contract="DJSharedServices.IMyServices" /> 
     <endpoint address="json" binding="webHttpBinding" bindingConfiguration="WebjsonHttp" behaviorConfiguration="webJSONBehavior" 
      name="webJSONHttpBinding" contract="DJSharedServices.IMyServices" /> 
     <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" name="mexBinding" />   
     </service> 

ve bağlayıcı yapılandırma ekledi:

<webHttpBinding> 
     <binding name="WebHttp" > 
      <security mode="None"></security> 
     </binding> 

     <binding name="WebjsonHttp" > 
      <security mode="None"></security> 
     </binding> 
     </webHttpBinding> 
+0

İki uç noktanın neden wsdl'nin çalışması için bir bağı paylaşamayacağına dair bir fikriniz var mı? – JeremyWeir

+0

@Jayrdub Farklı bir adrese ihtiyaç duyduğundan ve farklı adreslerin farklı proxy gereksinimlerine ihtiyaç duyduğunu düşünüyorum. – genericuser

+0

yea ve WAP ile kutu işlevselliğinden hiçbir şey yok, bunun için WebAPI ile URL adreslerinizi daha temiz tutmanızı sağlayacak adres = "json", address = "xml" yada yada. WebApi, içerik türünüze ve rakamlara bakar, bu da kendi hizmetlerinizde ve yapılandırmanızda kod içinde iyi bir zaman tasarrufu sağlayan kendi başına. – PositiveGuy

2

Kendinize bir iyilik yapın ve SOAP ve REST hem işlevlerinden biri hizmet yaratmaya çalıştığını durdurun. Bir karmaşaya son vereceksiniz. Gereksinimlerinizi gözden geçirin ve ihtiyaçlarınız için en uygun olan yaklaşımı seçin.

+1

neden böyle diyorsun? Bu yaklaşımın uygun olmadığını ya da başka bir yaklaşımın daha iyi olduğunu söyleyen bazı linkleriniz var mı? – genericuser

+0

@ Priya10 SOAP, uzak nesne mimarisinin uygulanmasını destekleyen bir protokoldür. REST tamamen farklı mimari tarzıdır. Doğru senaryo için geçerli bir yaklaşımdır, ancak ikisi uyumlu değildir. –

+2

@DarrelMiller: Bir müşteri REST istediğinde uçmayacak ve diğeri SOAP arabirimlerini esas olarak aynı işleve bağlayacaktır – DeepSpace101

İlgili konular