自托管服务器中两个WCF服务之间的通信
本文关键字:WCF 两个 服务 之间 通信 服务器 | 更新日期: 2023-09-27 18:01:46
在MSDN文章中描述的自托管服务中有两种服务。
现在我想从另一个呼叫一个。一个做一些与数据库相关的工作,另一个提供一些工作。我想在其他服务中使用数据库功能。
我尝试添加一个服务引用,如这里所述:Stackoverflow,有类似的问题但我收到消息:"从地址下载元数据时出错",因此添加服务引用是不可能的。
服务本身都在运行和工作,因为我已经从客户端应用程序中使用了它们。
这是我要使用的服务的web.config。
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0" />
</system.web>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>
</configuration>
以下是我的自托管服务的App.config中的部分内容
<?xml version="1.0"?>
<configuration>
<system.serviceModel>
<!-- omitted lots of blocks -->
<services>
<service name="MyProject.WorkService.GeneralWorkService" behaviorConfiguration="SimpleServiceBehavior">
<host>
<baseAddresses>
<add baseAddress="http://localhost:8080/"/>
</baseAddresses>
</host>
<endpoint address="traceability" binding="basicHttpBinding" name="WorkService" contract="MyProject.Service2.Contracts.IService2"/>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>
<service name="MyProject.DatabaseService.GeneralDatabaseService" behaviorConfiguration="SimpleServiceBehavior">
<host>
<baseAddresses>
<add baseAddress="http://localhost:8000/"/>
</baseAddresses>
</host>
<endpoint address="gateway" binding="basicHttpBinding" name="DatabaseService" contract="MyProject.DatabaseService.Contracts.IDatabaseService"/>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>
</services>
<client>
<endpoint name="Service2EP" address="http://localhost/someWork" binding="basicHttpBinding" contract="MyProject.Service2.IService2">
</endpoint>
<endpoint name="DatabaseServiceEP" address="http://localhost/gateway" binding="basicHttpBinding" contract="MyProject.DatabaseService.IDatabaseService">
</endpoint>
</client>
</system.serviceModel>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>
</configuration>
-更新-
我可以使用浏览器窗口在上查看我的服务
http://localhost:8000
也许还有其他方式可以使用我的服务。我应该使用代理吗可以用CCD_ 2生成?
也许还有更好的方法。添加服务引用似乎不起作用我不知道为什么。
您确定在要引用的服务的配置中配置了mex端点吗?如果没有,服务将不会公开进行服务引用所需的信息(WSDL(。
至少有4种可能性:
- 未定义元数据交换mex终结点
- 未启用元数据交换
- 你用错了地址
- 您正被某些安全设置阻止
来自从地址下载元数据时出错
终于找到了答案。
必须将端点从自托管app.config复制到服务web.config中。
从那时起,对话框中的错误消息(底部的"详细信息"链接(都很有帮助。
只需要将服务行为添加到我已经在自托管app.config中定义的DatabaseService中。
谢谢大家的帮助。会接受W1ck3dHcH的答案,因为它是正确的,但我只是没有看到它。