0

我正在学习 wcf,所以我经常想到问题。最近我开发了一个小型计算器 wcf 服务。我有三个项目,一个有服务合同,另一个有 wcf 服务,主类是我自己托管服务的地方。在 app.config 文件中,我给了我的端点地址 net.tcp://localhost:5555/Calculator 我一直认为我必须在服务 url 的末尾给出我的服务类名称。在我的应用程序中,我的服务 url 看起来像上面,计算器是我的服务类名称。

就在几天前,我正在浏览一个 wcf 代码,我看到那里的服务类名称是chatsrv但服务 url 看起来像net.tcp://localhost:5555/chat

i like to know that can i give any name to my service at the end?

1)如果是这样,那么自我主机代码如何理解需要启动哪个url服务?

2)如果我设置为false,<serviceMetadata httpGetEnabled="false"/>那么其他客户端如何使用我的服务,因为我已经设置httpGetEnabled="false"并自行托管服务,但是从其他.net项目我可以通过通道工厂使用该服务并作为添加参考?httpGetEnabled="true"所以告诉我如果 false 工作正常,人们需要设置什么?

不管我知道,如果httpGetEnabled="false"mex 端点不会暴露给其他客户端,因此没有其他客户端可能无法添加对我的服务参考项目的参考。我是新来的,所以对内部服务不好。如果可能,请详细讨论。

3)为什么当客户端可以在没有 mex 端点的情况下通过通道工厂实例化和调用服务功能时需要 mex 端点,那么为什么以及何时需要 mex 端点?

谢谢

更新

1)我想知道我可以给任何 url 作为端点地址吗?我已将此net.tcp://localhost:5555/chat作为我的端点地址,它可以工作,但是如果我给net.tcp://localhost:5555/Mychat之类的端点地址,那么它可以工作吗?

我想知道给出端点地址 url 的约定是什么?

2) 现在关于 mex 端点。在我的服务配置文件中,我禁用了 mex,但我仍然看到任何客户端都可以添加参考,例如net.tcp://localhost:5555/chat/mex怎么可能?

当 mex 被禁用时,mex 点不应该在客户端之前暴露或访问......我是对的吗?

请指导我。谢谢

4

2 回答 2

3

我将尝试回答您的一些问题:

1) 配置服务时,您必须使用流行的配置文件或如下代码配置端点 URL:

 Dim URL as string = "http://ServerName:port/SomeClass/SomeFunction"
 Dim ServiceHost As New ServiceHost(GetType(YourImplementationClass), URL) 
 Dim ServiceHostEndPoint As EndpointAddress = New EndpointAddressURL(URL) 
 ServiceHost.AddServiceEndpoint(GetType(iYourImplementationClass), binding, ServiceHostEndPoint.ToString)
 ServiceHost.AddServiceEndpoint(ServiceMetadataBehavior.MexContractName, MetadataExchangeBindings.CreateMexHttpsBinding(), "mex")
 ServiceHost.Open()

2) 您可以直接向您的客户提供 URL 和 xsl,但使用 Mex 公开您的端点对每个人来说都更容易。此外,如果您进行更改,他们可以重新引用您的 mex 元数据并自动更新他们的界面。

3) 如果客户端使用通道工厂自己配置端点,则不需要 mex,使用 mex 更容易。只需在浏览器中输入您的端点 URL 即可生成连接到您的 Web 服务所需的大部分内容。

希望有帮助。

于 2014-01-30T15:07:46.967 回答
0

注释掉下面的行,因为它会在您定义服务端点的配置文件中配置代理时自动添加。

<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />

如果要检查,右键单击添加服务代理的服务代理,然后选择“配置服务引用”,您会注意到最后在服务的 URL 中添加了 /mex

于 2016-04-20T16:59:31.820 回答