关于WCF服务网址& Mex端点使用情况

时间:2014-01-30 14:38:17

标签: c# wcf wcf-endpoint

我正在学习wcf因此经常出现问题。最近我开发了一个小型计算器wcf服务。我有三个项目一个有服务合同,另一个有主要类的wcf服务,我自己主持服务。在app.config文件中,我给出了我的端点地址 的的net.tcp://本地主机:5555 /计算器 我一直认为我必须在服务URL的末尾提供我的服务类名称。在我的应用中,我的服务网址如上所示,计算器是我的服务类名称。

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

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

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

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

无论我知道如果httpGetEnabled="false",那么mex端点将不会向其他客户端公开,因此没有其他客户端可能无法添加对其服务引用项目的引用。我是新人,所以内部服务不好。如果可能的话,请详细讨论。

3)当客户端可以实例化&amp;时,为什么需要mex端点?通过没有mex端点的渠道工厂调用服务功能然后为什么&amp;当mex端点需要?

感谢

更新

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

我想知道给出端点地址网址的惯例是什么?

2)现在关于mex端点。在我的服务配置文件中我禁用mex但仍然我看到任何客户端都可以添加像 net.tcp:// localhost:5555 / chat / mex 这样的引用?

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

请指导我。感谢

2 个答案:

答案 0 :(得分: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服务所需的大部分内容。

希望有所帮助。

答案 1 :(得分:0)

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

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

如果要检查,请右键单击添加了服务代理的服务代理,然后选择&#34;配置服务参考&#34;并且您会注意到/ mex最后添加到服务的URL中