WCF - Ошибка с привязкой - PullRequest
       35

WCF - Ошибка с привязкой

1 голос
/ 20 сентября 2011
The endpoint at 'http://localhost:8731/Design_Time_Addresses/WCF/WCFService/' does not have a Binding with the None MessageVersion.  'System.ServiceModel.Description.WebHttpBehavior' is only intended for use with WebHttpBinding or similar bindings.

Это ошибка, которую я получаю, когда пытаюсь запустить службу WCF. Я прочитал здесь каждый пост об ошибках привязки, но все они немного отличаются, и я не могу понять это. Вот мой app.config:

<system.serviceModel>
    <services>
      <service name="WCF.WCFService">
        <endpoint address="" binding="wsHttpBinding" contract="WCF.IWCFService">
          <identity>
            <dns value="localhost" />
          </identity>
        </endpoint>
        <endpoint
          address="mex"
          binding="mexHttpBinding"
          bindingConfiguration=""
          contract="IMetadataExchange"/>
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8731/Design_Time_Addresses/WCF/WCFService/" />
          </baseAddresses>
        </host>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <serviceMetadata httpGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>
      </serviceBehaviors>
      <endpointBehaviors>
        <behavior>
          <webHttp />
        </behavior>
      </endpointBehaviors>
    </behaviors>
  </system.serviceModel>

Я размещаю свою службу WCF в службе Windows, если это имеет значение. Цель MY End - использовать приложение winforms для использования службы WCF. Когда я запускаю только службу WCF в VS, она работает, но когда я добавляю конфигурацию в app.config службы Windows и пытаюсь запустить службу WCF с ней, я получаю сообщение об ошибке. Любая помощь будет великолепна.

1 Ответ

11 голосов
/ 20 сентября 2011

Исключение информирует вас о том, что поведение вашей конечной точки несовместимо с вашей привязкой (wsHttpBinding).

Удалите из поведения конечной точки или используйте WebHttpBinding вместо wsHttpBinding.

Используйте WebHttpBinding, если вы хотите настроить конечные точки для веб-сервисов, которые используют HTTP-запросы вместо SOAP-сообщений. WebHttpBehavior () включает эту модель программирования при использовании вместе с WebHttpBinding (или совместимой).

И в этом проблема. Это поведение не совместимо с выбранной привязкой (wsHttpBinding).

Вам также следует указать конфигурацию конечной точки:

<endpointBehaviors>
    <behavior name="WebHttp">
        <webHttp />
    </behavior>
</endpointBehaviors>

И используйте имя, чтобы связать его с конечной точкой службы:

<endpoint address="" binding="wsHttpBinding" contract="WCF.IWCFService" 
          behaviorConfiguration="WebHttp"/>
    <identity>
        <dns value="localhost" />
    </identity>
</endpoint>

Это гарантирует, что конечная точка вашей службы использует поведение, заданное поведением конечной точки WebHttp (webHttp). Прямо сейчас вы не назвали его, поэтому конечная точка mex также получает такое поведение. Это не нужно. Просто используйте mexHttpBinding для конечной точки mex, но не связывайте его с тем же поведением, что и служба.

...