Конфигурация WCF netTCp, конечная точка равна нулю - PullRequest
0 голосов
/ 07 марта 2011

Я получаю следующую ошибку

"Адрес собственности на ChannelFactory.Endpoint был нулевым. Конечная точка ChannelFactory должна иметь указан правильный адрес. "

и я не уверен, что я делаю неправильно. Кто-нибудь знает, в чем суть этого? Ниже приведены сервер App.config и клиентская часть моего проекта. Спасибо за помощь, с уважением

 <system.serviceModel>
    <services>
      <service name="Server.DualService" behaviorConfiguration="NetTcpBehavior">
        <endpoint address=""
              binding="netTcpBinding"
              bindingConfiguration="DuplexBinding"
              contract="Server.IDualService" />

        <endpoint address="mex" binding="mexTcpBinding" contract="Server.IDualService" />
        <host>
          <baseAddresses>
            <add baseAddress="net.tcp://localhost:8731/Service/DualService/" />
          </baseAddresses>
        </host>
      </service>
      <service name="Server.PhoneService" behaviorConfiguration="Server.PhoneServiceBehavior">
        <endpoint address="" binding="wsHttpBinding" bindingConfiguration="" contract="Server.IPhoneService" />
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:4444/Service/PhoneService" />
          </baseAddresses>
        </host>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="Server.DualServiceBehavior">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>
        <behavior name="Server.PhoneServiceBehavior">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>
        <behavior  name="NetTcpBehavior">
          <serviceThrottling maxConcurrentSessions="10000" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <bindings>
      <netTcpBinding>
        <binding name="DuplexBinding" sendTimeout="00:00:11">
          <reliableSession enabled="true" />
          <security mode="None" />
        </binding>
      </netTcpBinding>
    </bindings>
  </system.serviceModel>

СТОРОНА КЛИЕНТА

<system.serviceModel>
    <bindings>
        <basicHttpBinding>
            <binding name="DefaultBinding_IPhoneService" closeTimeout="00:01:00"
                openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
                allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
                maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
                messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
                useDefaultWebProxy="true">
                <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                    maxBytesPerRead="4096" maxNameTableCharCount="16384" />
                <security mode="None">
                    <transport clientCredentialType="None" proxyCredentialType="None"
                        realm="">
                        <extendedProtectionPolicy policyEnforcement="Never" />
                    </transport>
                    <message clientCredentialType="UserName" algorithmSuite="Default" />
                </security>
            </binding>
            <binding name="DefaultBinding_IDualService" closeTimeout="00:01:00"
                openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
                allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
                maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
                messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
                useDefaultWebProxy="true">
                <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                    maxBytesPerRead="4096" maxNameTableCharCount="16384" />
                <security mode="None">
                    <transport clientCredentialType="None" proxyCredentialType="None"
                        realm="">
                        <extendedProtectionPolicy policyEnforcement="Never" />
                    </transport>
                    <message clientCredentialType="UserName" algorithmSuite="Default" />
                </security>
            </binding>
        </basicHttpBinding>
        <wsHttpBinding>
            <binding name="WSHttpBinding_IPhoneService" closeTimeout="00:01:00"
                openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
                bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
                maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
                messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"
                allowCookies="false">
                <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                    maxBytesPerRead="4096" maxNameTableCharCount="16384" />
                <reliableSession ordered="true" inactivityTimeout="00:10:00"
                    enabled="false" />
                <security mode="Message">
                    <transport clientCredentialType="Windows" proxyCredentialType="None"
                        realm="">
                        <extendedProtectionPolicy policyEnforcement="Never" />
                    </transport>
                    <message clientCredentialType="Windows" negotiateServiceCredential="true"
                        algorithmSuite="Default" establishSecurityContext="true" />
                </security>
            </binding>
        </wsHttpBinding>
    </bindings>
    <client>
        <endpoint binding="basicHttpBinding" bindingConfiguration="DefaultBinding_IPhoneService"
            contract="IPhoneService" name="DefaultBinding_IPhoneService_IPhoneService" />
        <endpoint binding="basicHttpBinding" bindingConfiguration="DefaultBinding_IDualService"
            contract="IDualService" name="DefaultBinding_IDualService_IDualService" />
        <endpoint address="http://localhost:4444/Service/PhoneService"
            binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IPhoneService"
            contract="ServiceReference2.IPhoneService" name="WSHttpBinding_IPhoneService">
            <identity>
                <userPrincipalName value="PANDZIA-PC\PANDZIA" />
            </identity>
        </endpoint>
    </client>
</system.serviceModel>

Ответы [ 2 ]

1 голос
/ 08 марта 2011

Все работает, вы были правы :), еще раз спасибо, и ниже я выкладываю правильную конфигурацию, возможно когда-нибудь это кому-нибудь поможет, ..: D: D

На стороне сервера Iя исправил IMetadataExchange в конечной точке:

 <endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange" /> 

, и я изменил немного

<behavior  name="NetTcpBehavior">
      <serviceMetadata/>
      <serviceThrottling maxConcurrentSessions="10000" />
    </behavior>

На СТОРОНЕ КЛИЕНТА я удалил большую часть генерируемого кода в ретенции с DualService и добавил

<endpoint name=""
              address="net.tcp://localhost:8731/Service/DualService/"
              binding="netTcpBinding"
              bindingConfiguration="DuplexBinding"
              contract="IDualService" />

где привязка выглядит так:

<netTcpBinding>
        <binding name="DuplexBinding" sendTimeout="00:00:05" >
          <reliableSession enabled="true" />
          <security mode="None" />
        </binding>
      </netTcpBinding>
1 голос
/ 07 марта 2011

Возникла проблема с вашей конфигурацией. Сервер указывает DualService через net.tcp, но клиент использует BasicHttpBinding и не указывает адрес. Также у вашего клиента есть конфигурация для большего количества конечных точек, чем у вашей службы, и у конечной точки mex в DualService есть неверный контракт (должен быть IMetadataExchange).

Только клиентская конечная точка для PhoneService выглядит правильно.

...