gpt4 book ai didi

c# - WCF NetTcp 配置问题

转载 作者:太空宇宙 更新时间:2023-11-03 11:00:33 25 4
gpt4 key购买 nike

我们在为 IIS 本地托管的 WCF Web 服务配置 netTcp 时遇到问题。这是在带有 DotNet 4.0 (VS2012) 的 Windows 7 和 IIS 7 上,防火墙被禁用。

我们已经完成了以下步骤来配置 netTcp:

  1. 在 IIS 中,为默认网站设置 net.tcp 808:* 的站点绑定(bind)
  2. 在我们 Web 服务的 IIS 中,启用的协议(protocol)是“http,net.tcp”(无空格)
  3. 已验证 Net.Tcp 监听器适配器和 Net.Tcp 端口共享服务正在运行(也回收了它们)

现在,当我们运行 netstat -ona 时,我们没有看到 127.0.0.1:808 的任何列表 - 我们应该吗???

这是我的 Web.config:

<system.web>
<customErrors mode="Off"></customErrors>
<compilation debug="true" targetFramework="4.0"></compilation>
<identity impersonate="false" />
</system.web>
<system.serviceModel>
<diagnostics>
<messageLogging logMalformedMessages="false" logMessagesAtServiceLevel="false"
logMessagesAtTransportLevel="false" />
</diagnostics>
<bindings>
<netTcpBinding>
<binding name="XxxxxxxCommonServiceBinding" />
</netTcpBinding>
</bindings>
<services>
<service behaviorConfiguration="XxxxxxxCommonService_Behavior" name="CS.WebService.Xxxxxxx.Common.XxxxxxxCommonService">
<endpoint address="net.tcp://localhost:808/CS.WebService.Xxxxxxx.Common.XxxxxxxCommonService/XxxxxxxCommonService.svc" binding="netTcpBinding"
bindingConfiguration="XxxxxxxCommonServiceBinding" name="XxxxxxxCommonNetTcpBinding"
contract="CS.ServiceContracts.Xxxxxxx.Common.IXxxxxxxCommonService" />
<endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="XxxxxxxCommonService_Behavior">
<serviceMetadata httpGetEnabled="false" />
<serviceDebug includeExceptionDetailInFaults="false" />
<dataContractSerializer maxItemsInObjectGraph="2147483647" />
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="false">
</serviceHostingEnvironment>
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
</system.webServer>

这是 App.config:

<system.serviceModel>
<client>
<endpoint name="CS.WebService.Xxxxxxx.Common.XxxxxxxCommonService"
address="net.tcp://localhost/CS.WebService.Xxxxxxx.Common.XxxxxxxCommonService/XxxxxxxCommonService.svc"
binding="netTcpBinding"
bindingConfiguration="XxxxxxxCommonNetTcpBinding"
contract="CS.ServiceContracts.Xxxxxxx.Common.IXxxxxxxCommonService"/>
</client>
</system.serviceModel>

这是我尝试调用服务的客户端代码:

var endPoint = new EndpointAddress(
"net.tcp://127.0.0.1:809/CS.WebService.Xxxxxx.Common.XxxxxxCommonService/XxxxxxCommonService.svc");
var binding = new NetTcpBinding { TransferMode = TransferMode.Streamed, SendTimeout = TimeSpan.MaxValue };
var channel = new ChannelFactory<IXxxxxxCommonService>(binding, endPoint);
var proxy = channel.CreateChannel()
var request = new GetDataRequest();
var response = proxy.GetData(request);

正是在这一点上,我们得到了以下错误:

无法连接到 net.tcp://127.0.0.1:809/CS.WebService.Xxxxxx.Common.XxxxxxCommonService/XxxxxxCommonService.svc。连接尝试持续了 00:00:00 的时间跨度。 TCP 错误代码 10061:无法建立连接,因为目标机器主动拒绝它 127.0.0.1:809。

如果我将代码和 WebConfig 中的端口更改为 808,我们会收到以下错误:

在 net.tcp://127.0.0.1/CS.WebService.Xxxxxx.Common.XxxxxxCommonService/XxxxxxCommonService.svc 上没有监听端点可以接受消息。这通常是由不正确的地址或 SOAP 操作引起的。有关详细信息,请参阅 InnerException(如果存在)。 (注意,没有内部异常)

所以在我看来,因为 netstat -ona 没有显示 127.0.0.1:808,所以我没有正确配置某些东西。但 Net.Tcp 服务再次运行并已被回收,我相信 IIS 也已正确设置,因此不确定转向何处。

最佳答案

转到“控制面板”>“程序和功能”>“打开或关闭 Windows 功能”。在随后的对话框中,转到条目 Microsoft .NET Framework 3.5.1 并启用 Windows Communication Foundation Non-HTTP Activation。(虽然它说 3.5.1 - Win7 内置框架 - 但它也适用于 4.0)。

您应该在 netstat 输出中看到 0.0.0.0:808

关于c# - WCF NetTcp 配置问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17835857/

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