2013-04-22 7 views
1

У меня есть сервис с четырьмя конечными точками определяется конфигурация выглядит следующим образом:службы WCF с несколькими креплениями WebHttpBinding проваливается в тестовом клиенте Visual Studio

<service name="Systembolaget.Services.ButikService" behaviorConfiguration="default"> 
    <endpoint 
     address="xml" 
     binding="webHttpBinding" 
     behaviorConfiguration="xml" 
     contract="Systembolaget.Contracts.Butiker.IButikService" /> 

    <endpoint 
     address="json" 
     binding="webHttpBinding" 
     behaviorConfiguration="json" 
     contract="Systembolaget.Contracts.Butiker.IButikService" /> 

    <endpoint 
     address="soap" 
     binding="basicHttpBinding" 
     contract="Systembolaget.Contracts.Butiker.IButikService" 
     bindingConfiguration="default"/> 

    <endpoint 
     address="mex" 
     binding="mexHttpBinding" 
     contract="IMetadataExchange" /> 
    </service> 

<behaviors> 
    <endpointBehaviors> 
    <behavior name="xml"> 
     <webHttp defaultOutgoingResponseFormat="Xml" defaultBodyStyle="Bare"></webHttp> 
    </behavior> 

    <behavior name="json"> 
     <webHttp defaultOutgoingResponseFormat="Json" defaultBodyStyle="Bare"></webHttp> 
    </behavior> 
    </endpointBehaviors> 
    <serviceBehaviors> 
    <behavior name="default"> 
     <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" /> 
     <serviceDebug includeExceptionDetailInFaults="true" /> 
    </behavior> 
    </serviceBehaviors> 
</behaviors> 

При использовании сервиса с любым из конечных точек все это работает хорошо. Однако я не могу использовать тестовый клиент в Visual Studio 2012, если существуют как xml, так и конечная точка json. Если я закомментировать одну или другую сторону, клиент работает, если я продолжу как в конфигурационном файле я получаю следующее сообщение об ошибке:

Error: Cannot obtain Metadata from http://localhost:52832/VarugruppService.svc If this is a Windows (R) Communication Foundation service to which you have access, please check that you have enabled metadata publishing at the specified address. For help enabling metadata publishing, please refer to the MSDN documentation at http://go.microsoft.com/fwlink/?LinkId=65455 .WS-Metadata Exchange
URI: http://localhost:52832/VarugruppService.svc
Metadata contains a reference that cannot be resolved: http://localhost:52832/VarugruppService.svc .
There was no endpoint listening at http://localhost:52832/VarugruppService.svc that could accept the message. This is often caused by an incorrect address or SOAP action. See InnerException, if present, for more details.
The remote server returned an error: (404) Not Found.HTTP GET Error
URI: http://localhost:52832/VarugruppService.svc
There was an error downloading ' http://localhost:52832/VarugruppService.svc '.
The request failed with HTTP status 404: Not Found.

Любые идеи?

+1

Да - клиент WCF Test это только для ** SOAP ** привязок - ничего **, но ** 'webHttpBinding'. Основанный на REST 'webHttpBinding' может быть протестирован непосредственно с помощью браузера или с помощью инструмента, такого как FIddler –

+0

Да, я знаю это, и у меня есть привязка мыла, которая работает, если у меня нет более одного webHttpBinding, определенного для обслуживание. – Pelle

ответ

0

Вы можете достичь этого путем добавления отдельной конфигурации связывания для каждого webHttpBindng:

<bindings> 
    <webHttpBinding> 
    <binding name="xmlWebBinding"> 
    </binding> 
    <binding name="jsonWebBinding"> 
    </binding> 
    </webHttpBinding> 

</bindings> 
<services> 
    <service name="Systembolaget.Services.ButikService" behaviorConfiguration="default"> 
    <endpoint 
     address="xml" 
     binding="webHttpBinding" 
     bindingConfiguration="xmlWebBinding" 
     behaviorConfiguration="xml" 
     contract="Systembolaget.Contracts.Butiker.IButikService" /> 

    <endpoint 
     address="json" 
     binding="webHttpBinding" 
     bindingConfiguration="jsonWebBinding" 
     behaviorConfiguration="json" 
     contract="Systembolaget.Contracts.Butiker.IButikService" /> 

    <endpoint 
     address="soap" 
     binding="basicHttpBinding" 
     contract="Systembolaget.Contracts.Butiker.IButikService" 
     bindingConfiguration="default"/> 

    <endpoint 
     address="mex" 
     binding="mexHttpBinding" 
     contract="IMetadataExchange" /> 
    </service> 
</services> 
<behaviors> 
    <endpointBehaviors> 
    <behavior name="xml"> 
     <webHttp defaultOutgoingResponseFormat="Xml" defaultBodyStyle="Bare"></webHttp> 
    </behavior> 

    <behavior name="json"> 
     <webHttp defaultOutgoingResponseFormat="Json" defaultBodyStyle="Bare"></webHttp> 
    </behavior> 
    </endpointBehaviors> 
    <serviceBehaviors> 
    <behavior name="default"> 
     <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" /> 
     <serviceDebug includeExceptionDetailInFaults="true" /> 
    </behavior> 
    </serviceBehaviors> 
</behaviors> 

Кредита на отвечающий в нижней части этого форума:

http://tiku.io/questions/1554725/how-can-basichttpbinding-webhttpbinding-mexhttpbinding-endpoints-coexist-in-o