Выдает ошибку при попытке использовать службу wcf с nettcpbinding

#c# #web-services #wcf #nettcpbinding

#c# #веб-сервисы #wcf #nettcpbinding

Вопрос:

Я создал службу wcf с nettcpbinding (режим безопасности = «Нет»). Разместил ее в IIS .. она запускается в браузере:

 net.tcp://localhost/NetTcptest/Service1.svc/mex
  

Когда я использую эту службу, используя ссылку на службу, она работает.
но когда я пытаюсь использовать фабрику каналов, это выдает ошибку:

Это может быть связано либо с несоответствием контракта (несовпадающие действия между отправителем и получателем), либо с несоответствием привязки / безопасности между отправителем и получателем. Убедитесь, что отправитель и получатель имеют одинаковый контракт и одинаковую привязку (включая требования безопасности, например, сообщение, транспорт, Нет).

Я не понимаю, что не так в моем коде.

моя веб-конфигурация службы:

  <?xml version="1.0"?>
<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.0" />
  </system.web>
  <system.serviceModel>
    <!--All Bindings Information-->
    <bindings>
       <netTcpBinding>
        <binding name="netTcpBindingConfig">
          <security mode="None">
            <transport clientCredentialType="None" protectionLevel="None"/>
            <message clientCredentialType="None" algorithmSuite="Default"/>
          </security>
        </binding>
      </netTcpBinding>
    </bindings>
    <!--All Service Information-->
    <services>
      <service name="NetTcpTest.Service1" behaviorConfiguration="netTcpServiceBehavior">
        <endpoint address="NetTcpTest"
                  contract="NetTcpTest.IService1"
                  binding="netTcpBinding"
                  bindingConfiguration="netTcpBindingConfig"/>
        <endpoint address="mex"
                  binding="mexTcpBinding"
                  contract="IMetadataExchange"/>
        <host>
          <baseAddresses >
            <!--<add baseAddress ="http://localhost:8080"/>-->
            <add baseAddress ="net.tcp://localhost/Service1.svc"/>
          </baseAddresses>
        </host>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="netTcpServiceBehavior">
          <serviceMetadata httpGetEnabled="false" httpGetUrl=""/>
          <serviceDebug includeExceptionDetailInFaults="false"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
  </system.serviceModel>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>
</configuration>
  

Также мой тестовый код приложения:

 private void CallService_1_Click(object sender, EventArgs e)
        {
            try
            {

                string _uri = "net.tcp://localhost/NetTcptest/Service1.svc/mex";
                NetTcpBinding binding = new NetTcpBinding();
                binding.Security.Mode = SecurityMode.None;
                binding.Security.Transport.ClientCredentialType = TcpClientCredentialType.None;
                binding.Security.Transport.ProtectionLevel = System.Net.Security.ProtectionLevel.None;
                binding.Security.Message.ClientCredentialType = MessageCredentialType.None;
                EndpointAddress address = new EndpointAddress(_uri);
                ChannelFactory<IService1> channel = new ChannelFactory<IService1>(binding, address);
                IService1 clientProxy = channel.CreateChannel();
                label1.Text = clientProxy.GetData(100);


            }
            catch (Exception ex)
            {
                label1.Text = ex.Message;
            }
        }
  

Комментарии:

1. Проблема в том, что вы создаете конфигурацию своего клиентского канала в коде. Попробуйте использовать config и скопируйте файл конфигурации из службы, изменив его для определения клиентского канала. Или используйте конфигурацию ссылки на службу generate и измените use it в своем channelfactory.

2. Проверьте файл App.Config клиента.

3. спасибо за ответ, но я хочу создать его в коде, а не в файле конфигурации приложения….