SOAP, JSON и POX в одном и том же restful wcf - PullRequest
8 голосов
/ 05 января 2011

Я пытаюсь использовать SOAP и RESTful в одной и той же службе WCF.Я достиг этого, кроме одного вопроса.Ниже приведен мой web.config:

<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>

Когда у меня есть все конечные точки, выдается следующая ошибка:

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)

Все работает нормально, если я закомментирую конечную точку json.

Не могли бы вы помочь мне выяснить, почему?

Заранее спасибо.

Ответы [ 2 ]

12 голосов
/ 05 января 2011

я только что добавил, изменил конфигурацию привязки для поведения json.Я использовал одну и ту же конфигурацию для JSON и POX.Теперь я изменил конфигурацию на:

<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> 

и добавил конфигурацию привязки:

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

        <binding name="WebjsonHttp"  >
          <security mode="None"></security>
        </binding>
      </webHttpBinding>
2 голосов
/ 06 января 2011

Сделайте себе одолжение и перестаньте пытаться создать один сервис, который выполняет SOAP и REST.Вы собираетесь закончить с беспорядком.Изучите ваши требования и выберите подход, который наиболее соответствует вашим потребностям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...