我已经在闲暇时间里努力解决这个问题几周了,坚决不想向这个非常棒的社区求助。但是我的精神已经崩溃了。所以...
我创建了一个WCF服务,并尝试在控制台应用程序中托管它,以便使用TCP端点。
我有一个包含契约和svc文件的项目。 我有另一个项目,其中包含控制台应用程序,引用了前面提到的项目。 我的控制台应用程序的主要方法如下:
到目前为止,一切都很好:
当我试图为一个完全独立的第三方应用程序添加服务引用以使用该服务时,情况就变得不妙了。当我尝试添加引用并使用net.tcp://localhost:49189/LicenceBucketWireService/LicenceBucketService/mex作为地址来发现细节时,我会收到以下错误信息:
“URI前缀未被识别。 元数据包含无法解析的引用:'net.tcp://localhost:49189/LicenceBucketWireService/LicenceBucketService/mex'。 元数据包含无法解析的引用:'net.tcp://localhost:49189/LicenceBucketWireService/LicenceBucketService/mex'。 如果该服务在当前解决方案中已定义,请尝试构建解决方案并重新添加服务引用。”
当我执行此任务时,控制台应用程序正在运行。 应用配置具有以下元素:
我创建了一个WCF服务,并尝试在控制台应用程序中托管它,以便使用TCP端点。
我有一个包含契约和svc文件的项目。 我有另一个项目,其中包含控制台应用程序,引用了前面提到的项目。 我的控制台应用程序的主要方法如下:
using (ServiceHost host = new ServiceHost(typeof(LicenceBucketWireService.LicenceBucketService)))
{
host.Open();
foreach (var endpt in host.Description.Endpoints)
{
Console.WriteLine("Enpoint address:\t{0}",endpt.Address);
Console.WriteLine("Enpoint binding:\t{0}",endpt.Binding);
Console.WriteLine("Enpoint contract:\t{0}\n", endpt.Contract.ContractType.Name);
}
Console.ReadLine();
}
到目前为止,一切都很好:
![enter image description here](https://istack.dev59.com/KdNlp.webp)
“URI前缀未被识别。 元数据包含无法解析的引用:'net.tcp://localhost:49189/LicenceBucketWireService/LicenceBucketService/mex'。 元数据包含无法解析的引用:'net.tcp://localhost:49189/LicenceBucketWireService/LicenceBucketService/mex'。 如果该服务在当前解决方案中已定义,请尝试构建解决方案并重新添加服务引用。”
当我执行此任务时,控制台应用程序正在运行。 应用配置具有以下元素:
<system.serviceModel>
<services>
<service name="LicenceBucketWireService.LicenceBucketService">
<clear />
<endpoint address="mex" binding="mexTcpBinding" contract="LicenceBucketWireService.ILicenceBucketService"
listenUriMode="Explicit">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="net.pipe://localhost/licenceBucketService"
binding="netNamedPipeBinding" bindingConfiguration="" contract="LicenceBucketWireService.ILicenceBucketService" />
<host>
<baseAddresses>
<add baseAddress="http://localhost:49187/LicenceBucketWireService/LicenceBucketService" />
<add baseAddress="net.tcp://localhost:49189/LicenceBucketWireService/LicenceBucketService" />
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior>
<!-- To avoid disclosing metadata information, set the values below to false before deployment -->
<serviceMetadata httpGetEnabled="false" />
<!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information -->
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
httpGetEnabled
属性更改为 true。 - tom redfern