我正在学习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点不应该在客户端暴露或访问之前......我是对的吗?
请指导我。感谢
答案 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中