我刚刚从 Microsoft WCF 示例中下载并运行了 net.tcp 绑定(bind)示例: WF_WCF_Samples\WCF\Basic\Binding\Net\Tcp\Default\CS
我打开解决方案并重建它,从 server/bin 目录启动服务器,从 client/bin 目录启动客户端,一切正常。
我向 service.cs 添加了一个新函数,然后从 client.cs 调用它。但是visual studio给出了这个错误: 'Microsoft.Samples.NetTcp.CalculatorClient' 不包含 'AddAndDouble' 的定义并且没有扩展方法 'AddAndDouble' 接受类型为 'Microsoft.Samples.NetTcp.CalculatorClient' 的第一个参数可以找到(你是否缺少 using 指令还是汇编引用?)
我假设它给出此错误是因为我的 generatedClient.cs 文件现在已过期,所以我正在尝试运行 svcutil 以生成新的 generatedClient.cs 文件。
但是当我运行 svc util 时,它是这样说的:
c:\Program Files\Microsoft Visual Studio 9.0\VC>svcutil.exe net.tcp://localhost: 9000/服务模型示例/服务/
Microsoft (R) 服务模型元数据工具 [Microsoft (R) Windows (R) Communication Foundation,版本 3.0.4506.648] 版权所有 (c) Microsoft Corporation。保留所有权利。
正在尝试从 'net.tcp://localhost:9000/servicemodelsampl 下载元数据 es/service/' 使用 WS-Metadata Exchange。此 URL 不支持 DISCO。 Microsoft (R) 服务模型元数据工具 [Microsoft (R) Windows (R) Communication Foundation,版本 3.0.4506.648] 版权所有 (c) Microsoft Corporation。保留所有权利。
错误:无法从 net.tcp://localhost:9000/servicemodelsamples/获取元数据 服务/
如果这是您有权访问的 Windows (R) Communication Foundation 服务 ss,请检查您是否已在指定地址启用元数据发布 埃斯。有关启用元数据发布的帮助,请参阅 MSDN 文档 ionic http://go.microsoft.com/fwlink/?LinkId=65455 .
WS-元数据交换错误 URI: net.tcp://localhost:9000/servicemodelsamples/service/
Metadata contains a reference that cannot be resolved: 'net.tcp://localhost:
9000/servicemodelsamples/service/'。
The socket connection was aborted. This could be caused by an error processi
ng 您的消息或远程主机超过接收超时,或未 底层网络资源问题。本地套接字超时为“00:04:59.9687500”。
An existing connection was forcibly closed by the remote host
如果您需要更多帮助,请输入“svcutil/?”
因此,我通过执行以下操作检查服务器是否正在监听: 网络统计/一个 |找到/i "9000" TCP 0.0.0.0:9000 0.0.0.0:0 监听
知道我做错了什么吗?
最佳答案
该示例中的服务未公开任何可由 svcutil 等工具使用的元数据端点。如果您更改服务实现以添加元数据端点(见下文),svcutil 应该可以使用它。
// Host the service within this EXE console application.
public static void Main()
{
// Create a ServiceHost for the CalculatorService type.
using (ServiceHost serviceHost = new ServiceHost(typeof(CalculatorService),
new Uri("net.tcp://localhost:9000/servicemodelsamples/service")))
{
ServiceMetadataBehavior smb =
serviceHost.Description.Behaviors.Find<ServiceMetadataBehavior>();
if (smb == null) serviceHost.Description.Behaviors.Add(
new ServiceMetadataBehavior());
serviceHost.AddServiceEndpoint(typeof(IMetadataExchange),
MetadataExchangeBindings.CreateMexTcpBinding(), "mex");
serviceHost.AddServiceEndpoint(typeof(ICalculator),
new NetTcpBinding(), "");
// Open the ServiceHost to create listeners
// and start listening for messages.
serviceHost.Open();
// The service can now be accessed.
Console.WriteLine("The service is ready.");
Console.WriteLine("Press <ENTER> to terminate service.");
Console.WriteLine();
Console.ReadLine();
}
}
关于wcf - 无法在 wcf 示例中的 net.tcp 示例上成功运行 svcutil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7883740/