我想知道为什么我需要声明这个:
<serviceMetadata httpGetEnabled="true" />
Run Code Online (Sandbox Code Playgroud)
还有这个
<endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex" />
Run Code Online (Sandbox Code Playgroud)
如果我只使用第一个 - 它通过浏览器工作. 那为什么我需要第二个呢?
你能否举例说明我必须使用后者的情况?
mar*_*c_s 20
你需要
启用该服务发布的所有元数据(这是serviceMetadata
行为) -但你并不需要的httpGetEnabled
-这是可选
有一个地方(端点),查询客户端可以获取该服务元数据 - 即MEX端点.这是一种机器可读的元数据格式 - Visual Studio或svcutil可用于创建客户端的格式.它不适合人类消费
这似乎在以下情况下有用......
<system.serviceModel>
<services>
<service name="WCFService.Service" behaviorConfiguration="ServiceBehavior">
<host>
<baseAddresses>
<add baseAddress="net.tcp://localhost:8080/WCFService"/>
</baseAddresses>
</host>
<!-- Net.Tcp EndPoints-->
<endpoint address=""
binding="netTcpBinding"
contract="WCFService.IService" />
<endpoint address="mex"
binding="mexTcpBinding"
contract="IMetadataExchange" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="ServiceBehavior">
<serviceMetadata httpGetEnabled="false" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
Run Code Online (Sandbox Code Playgroud)
没有定义HTTP端点,您可以通过以下方式访问您的服务......
- Browser: http://localhost/WCFService/Service.svc
- svcutil.exe net.tcp://localhost:8080/WCFService/Service.svc/mex
Run Code Online (Sandbox Code Playgroud)
如果您注释掉MEX端点,则两者都不起作用.
你想知道为什么元数据仍然可以在浏览器中看到
a)我没有HTTP端点,b)我已经专门设置了......
<serviceMetadata httpGetEnabled="false" />
Run Code Online (Sandbox Code Playgroud)
原因是在网站的高级设置中,我在"高级设置"下为"启用的协议"定义了以下内容...
http,net.tcp
如果删除http
则无法在浏览器中看到元数据.似乎在这种情况下,只有net.tcp启用的网站,您需要mex端点.
归档时间: |
|
查看次数: |
16245 次 |
最近记录: |