我想我已经尝试了所有方法,但我无法使用简单的net.tcp WCF服务,我需要一些帮助。我在Visual Studio 2015中有一个带有以下服务类的WCF net.tcp项目:
namespace AppRefactory.JdmCommSample
{
public enum DocType { Labels, Releases, Artists }
// NOTE: You can use the "Rename" command on the "Refactor" menu to change the interface name "IService1" in both code and config file together.
[ServiceContract]
public interface ILabelOperations
{
[OperationContract]
bool PassLabelProcess(string targetAddress, string hostCommand, MusicLabelContract musicLabel);
// TODO: Add your service operations here
}
}
以下实现了LabelProcess.svc文件中的服务:
namespace AppRefactory.JdmCommSample
{
// NOTE: You can use the "Rename" command on the "Refactor" menu to change the class name "MusicLabel" in code, svc and config file together.
// NOTE: In order to launch WCF Test Client for testing this service, please select MusicLabel.svc or MusicLabel.svc.cs at the Solution Explorer and start debugging.
public class LabelOperations : ILabelOperations
{
public bool PassLabelProcess(string targetAddress, string hostCommand, MusicLabelContract musicLabel)
{
throw new NotImplementedException();
}
}
}
我已经在web.config上对该服务进行了大量阅读,并使用ServiceModelReg.exe来帮助我 - 但以下是该服务项目的web.config的当前版本:
<?xml version="1.0"?>
<configuration>
<appSettings>
<add key="aspnet:UseTaskFriendlySynchronizationContext" value="true"/>
</appSettings>
<system.web>
<compilation debug="true" targetFramework="4.5.2"/>
<httpRuntime targetFramework="4.5.2"/>
<httpModules>
<add name="ApplicationInsightsWebTracking" type="Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule, Microsoft.AI.Web"/>
</httpModules>
</system.web>
<system.serviceModel>
<behaviors>
<endpointBehaviors>
<behavior name="epTcpBehavior">
<endpointDiscovery />
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="ServiceBehaviorConfig">
<serviceMetadata httpGetEnabled="false" />
<serviceDebug httpHelpPageEnabled="false" httpsHelpPageEnabled="false"
includeExceptionDetailInFaults="true" />
</behavior>
<behavior name="">
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
<protocolMapping>
<add binding="basicHttpsBinding" scheme="https"/>
<add binding="netTcpBinding" scheme="net.tcp" bindingConfiguration="InsecureTcp" />
</protocolMapping>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true"/>
<services>
<service behaviorConfiguration="ServiceBehaviorConfig" name="AppRefactory.JdmCommSample.LabelOperations">
<endpoint address="LabelService" binding="netTcpBinding" bindingConfiguration="InsecureTcp"
name="LabelOperations" contract="AppRefactory.JdmCommSample.ILabelOperations" />
<endpoint address="netTcpMex" binding="mexTcpBinding" bindingConfiguration="NewBinding0"
name="NetTcpMEX" contract="IMetadataExchange" />
<endpoint address="mexhttp" binding="mexHttpBinding" name="HttpMex"
contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="net.tcp://localhost/JdmCommSample/" />
</baseAddresses>
</host>
</service>
</services>
<bindings>
<netTcpBinding>
<binding name="InsecureTcp" portSharingEnabled="true">
<security mode="None" />
</binding>
</netTcpBinding>
<mexTcpBinding>
<binding name="NewBinding0" />
</mexTcpBinding>
</bindings>
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
<remove name="ApplicationInsightsWebTracking"/>
<add name="ApplicationInsightsWebTracking" type="Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule, Microsoft.AI.Web"
preCondition="managedHandler"/>
</modules>
<!--
To browse web app root directory during debugging, set the value below to true.
Set to false before deployment to avoid disclosing web app folder information.
-->
<directoryBrowse enabled="true"/>
<validation validateIntegratedModeConfiguration="false"/>
</system.webServer>
</configuration>
当我转到客户端项目并尝试添加服务引用时(在Visual Studio 2015中),我收到以下错误:
“发现”按钮在点击时不显示服务,因此我手动输入服务地址:net://localhost/JdmCommSample/LabelOperations.svc并点击“开始”按钮获得以下结果:
最后,我点击上面错误消息块(在对话框中)中的“详细信息”链接并获取以下内容:
添加服务引用错误对话:
无法识别URI前缀。 元数据包含无法解析的引用:'net.tcp://localhost/JdmCommSample/LabelOperations.svc'。 在net.tcp://localhost/JdmCommSample/LabelOperations.svc上没有可以接受该消息的端点。这通常是由错误的地址或SOAP操作引起的。有关更多详细信息,请参阅InnerException(如果存在)。 如果在当前解决方案中定义了服务,请尝试构建解决方案并再次添加服务引用。
我现在已经收到相同的错误消息已经有一段时间了,并且无法弄清楚为什么客户端的元数据一直坚持使用服务的旧http://地址以及为什么它不接受网络。 tcp地址。
最后,我应该快速添加我使用以下作为我的开发环境:
...我花了很多时间尝试通过使用支持net.tcp的默认服务(包括和不包含http)修改IIS设置并在/ bin和编码文件夹中创建虚拟应用程序来解决此问题。为了支持交互式调试。上面最终对话中描述的错误消息发生了变化 - 但只是说我正在使用的net.tcp://地址是'不可用'。
再次,非常感谢您的帮助!!!
答案 0 :(得分:1)
好的 - 所以看起来好像我已经解决了这个问题.....这里的问题是 - 我多年没有使用Visual Studio来配置net.tcp端点而且错误地结束了如果缺少曾经位于系统托盘中的WCF测试服务,则可以使用“添加服务引用”对话框来配置net.tcp链接。
根据MSDN Library关于通过Windows进程激活(WAS)设置net.tcp服务的文章,所有端点配置和服务引用都是使用手工制作或工具生成的代码(使用svcutil.exe)处理的。客户端 - 主要是在服务端手工制作的逻辑。
因此,我在这个帖子中的问题是由于期望不佳和错误信息造成的。道歉...
这里的下一步是创建一个单向服务方法,它将在客户端上抛出一个事件。我希望在这个主题的未来几天会有问题 - 如果有人有任何有用的链接分享这个主题,请不要自己保留! ;)