Во-первых, Nettcpbinding использует режим безопасности транспорта и аутентифицирует клиента с учетными данными Windows по умолчанию.
WCF выдает исключение, что сервер отклонил учетные данные клиента, что является режимом безопасности по умолчанию для NetTCP в WCF
Затем, когда мы меняем конфигурацию сервера и повторно размещаем сервис, мы должны заново генерировать прокси-класс клиента при его вызове.кроме того, нам может потребоваться изменить адрес конечной точки в конфигурации клиента, поскольку по умолчанию генерируется Localhost.
Я могу с этим смириться, но очень хотел бы знать, как это сделать без защиты.
Наконец, когда мы изменили защиту на None, клиенту не нужно предоставлять учетные данные для вызова службы.Я предлагаю вам повторно разместить службу и заново сгенерировать клиентский прокси-класс.Я сделал демо, желаю, чтобы это было полезно для вас.
Серверная часть (консольное приложение)
class Program
{
static void Main(string[] args)
{
using (ServiceHost sh=new ServiceHost(typeof(MyService)))
{
sh.Opened += delegate
{
Console.WriteLine("Service is ready......");
};
sh.Closed += delegate
{
Console.WriteLine("Service is closed");
};
sh.Open();
Console.ReadLine();
sh.Close();
}
}
}
[ServiceContract]
public interface IService
{
[OperationContract]
string SayHello();
}
public class MyService : IService
{
public string SayHello()
{
return "Hello Stranger";
}
}
App.config
<system.serviceModel>
<services>
<service behaviorConfiguration="Service1Behavior" name="VM1.MyService">
<endpoint address="" binding="netTcpBinding" bindingConfiguration="mybinding" contract="VM1.IService" >
</endpoint>
<endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange"/>
<host>
<baseAddresses>
<add baseAddress="net.tcp://localhost:13007/"/>
</baseAddresses>
</host>
</service>
</services>
<bindings>
<netTcpBinding>
<binding name="mybinding">
<security mode="None">
</security>
</binding>
</netTcpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="Service1Behavior">
<serviceMetadata />
<serviceDebug includeExceptionDetailInFaults="False"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
Конец клиента.
ServiceReference1.ServiceClient client = new ServiceReference1.ServiceClient();
try
{
Console.WriteLine(client.SayHello());
}
catch (Exception)
{
throw;
}
App.config
<system.serviceModel>
<bindings>
<netTcpBinding>
<binding name="NetTcpBinding_IService">
<security mode="None" />
</binding>
</netTcpBinding>
</bindings>
<client>
<!--we may need to change the generated endpoint address to autual server IP address.-->
<endpoint address="net.tcp://10.157.13.69:13007/" binding="netTcpBinding"
bindingConfiguration="NetTcpBinding_IService" contract="ServiceReference1.IService"
name="NetTcpBinding_IService" />
</client>
</system.serviceModel>
Не стесняйтесь, дайте мне знатьесли есть что-нибудь, с чем я могу помочь.