gpt4 book ai didi

c# - 如何托管公共(public) WCF 服务?

转载 作者:行者123 更新时间:2023-11-30 17:57:08 24 4
gpt4 key购买 nike

我正在尝试创建一个 tcp wcf 服务,该服务将托管在没有 IIS 的服务器上,并且公众无需身份验证即可访问。

这是我的做法:

ServiceHost svh = new ServiceHost(typeof(MyService));

var tcpbinding = new NetTcpBinding(SecurityMode.None);

var location = "net.tcp://localhost:11111";
svh.AddServiceEndpoint(typeof(IMyService), tcpbinding, location);

svh.Open();
....

该服务在 locashost 上运行良好,但是当我在服务器上设置它时(添加了防火墙异常(exception)),客户端崩溃并显示一条消息:

The socket connection was aborted. This could be caused by an error processing 
your message or a receive timeout being exceeded by the remote host, or an
underlying network resource issue. Local socket timeout was '00:00:59.7344663'.

这是客户端配置文件:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<system.serviceModel>
<bindings>
<netTcpBinding>
<binding name="NetTcpBinding_IMyService">
<security mode="None" />
</binding>
</netTcpBinding>
</bindings>
<client>
<endpoint address="net.tcp://myserver:11111/"
binding="netTcpBinding" bindingConfiguration="NetTcpBinding_IMyService"
contract="MyServer.IMyService" name="NetTcpBinding_IMyService" />
</client>
</system.serviceModel>
</configuration>

我应该更改什么才能使其正常工作?

最佳答案

我过去遇到过类似的问题,我通过在端点地址(ServiceHost .ctor)中不使用 localhost 而是使用实际的机器名称来解决它.此外,您可以在服务主机本身中定义地址,如下所示。

ServiceHost svh = new ServiceHost(typeof(MyService), new Uri("net.tcp://myserver:11111"));
var tcpbinding = new NetTcpBinding(SecurityMode.None);
svh.AddServiceEndpoint(typeof(IMyService), tcpbinding, "");
svh.Open();

关于c# - 如何托管公共(public) WCF 服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13446175/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com