gpt4 book ai didi

c# - 您可以在代码中执行 NetTcpBinding 吗?你应该?

转载 作者:可可西里 更新时间:2023-11-01 08:06:47 24 4
gpt4 key购买 nike

这里是 WCF 新手...我正在尝试使用 NetTcpBinding 自托管 WCF 服务。基于MSDN "how-to" tutorial我已经完成了代码中的所有绑定(bind),然后我将其从 WsHttpBinding 更改为 NetTcpBinding,现在看起来像这样:

var baseAddress = new Uri("net.tcp://localhost:8000/MyWebService");
var selfHost = new ServiceHost(typeof(ConcreteWebService), baseAddress);
try {
var binding = new NetTcpBinding();
binding.Security.Mode = SecurityMode.Message;
selfHost.AddServiceEndpoint(typeof(IWebService), binding, "TRWebService");
selfHost.Open();
Console.WriteLine("The service is ready at {0}", baseAddress.AbsoluteUri);
Console.WriteLine("Press <ENTER> to terminate service.");
Console.WriteLine();
Console.ReadLine();

selfHost.Close();
} catch (CommunicationException ce) {
Console.WriteLine("An exception occurred: {0}", ce.Message);
selfHost.Abort();
}

事实是,教程然后说您必须运行 svcutil.exe 来为客户端生成代理...但是自从我切换到 NetTcpBinding 后,svcutil 不再工作 - 无法检测到我的服务。我用谷歌搜索了这个问题,发现 NetTcpBinding 的每个示例都在 app.config 文件中而不是在代码中进行设置,并且它们都添加了一个名为“Mex”的端点,绑定(bind)类型为“mexTcpBinding”。在代码中似乎没有任何等效项。

那么,我是否必须更改我的项目以使用 app.config,并放弃基于代码的方法?任何人都可以向我解释 Mex 是什么,为什么我需要它,为什么它(显然)不能在代码中调用 - 或者如果可以,如何或为什么不鼓励它?一般来说,什么时候使用 app.config 更好,什么时候为 WCF 服务编写代码?

最佳答案

如果您使用 netTcpBinding - 并且在“企业防火墙后面”的 LAN 环境中,这样做绝对是个好主意 - 您还需要公开一个 MEX 端点(元数据交换) 使用 mexTcpBinding 以便 svcutil 能够检测并找到该服务。

MEX = 元数据交换是 WCF 用来“公开宣传”服务外观的机制。如果您有 MEX 端点,则 svcutil 等实用程序可以查询和“发现”服务,例如了解它暴露的所有服务方法,它期望获取的参数等等。

要添加 MEX 端点,您当然也可以使用代码!像这样的片段:

var mexBinding = MetadataExchangeBindings.CreateMexTcpBinding();
selfHost.AddServiceEndpoint(typeof(IMetadataExchange), mexBinding, "mex");

如果没有 MEX,您需要以某种方式“告诉”尝试使用您的服务的客户端您的服务提供了什么,以便客户端可以确保使用正确的参数调用正确的方法。

关于c# - 您可以在代码中执行 NetTcpBinding 吗?你应该?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4534478/

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