我已经将我的文件传输服务从basicHttpBinding更改为netTcpBinding,因为我正在尝试设置双工模式通道。我还启动了net.tcp端口共享服务。
目前我在开发阶段,并且在xp桌面自主托管,直到将应用程序移动到开发服务器之前,所以现在我没有访问IIS的权限。
在配置我的服务后:
<service behaviorConfiguration="transferServiceBehavior" name="API.FileTransfer.FileTransferService">
<endpoint name="MyFileTransferEP"
address = ""
binding = "netTcpBinding"
bindingConfiguration="MyFileTransferNetTcpEP"
behaviorConfiguration="NetTcpEPBehavior"
contract="API.FileTransfer.IFileTransferService" />
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
<host>
<baseAddresses>
<add baseAddress="net.tcp://localhost:8001/project/filetransfer.svc" />
</baseAddresses>
</host>
</service>
我的绑定如下:
<netTcpBinding>
<binding name="MyFileTransferNetTcpEP"
hostNameComparisonMode="StrongWildcard"
closeTimeout="00:01:00"
openTimeout="00:01:00"
receiveTimeout="00:10:00"
sendTimeout="00:01:00"
maxReceivedMessageSize="2147483647"
transferMode="Streamed"
portSharingEnabled="true">
<security mode="None">
<transport clientCredentialType="None" />
<message clientCredentialType="None" />
</security>
</binding>
</netTcpBinding>
当我右键并浏览SVC文件时,出现以下错误:“无法找到与NetTcpBinding绑定的端点匹配的基址,其方案为net.tcp。已注册的基址方案为[http]。”
在线阅读的建议是,为了解决这个问题,我需要在IIS中将net.tcp绑定添加到应用程序的绑定中。但是,如果我是自托管并且没有访问IIS,我该怎么办呢?顺便说一句,如果您正在阅读此内容并且“有”IIS,请执行以下操作:右键单击IIS中的虚拟目录/应用程序->管理应用程序->高级设置。在启用协议部分中,添加net.tcp。
有什么想法吗?
更新:我以为它已经可以工作了,但它仍然不能正常工作。现在我的情况如下:我仍然收到“找不到与方案net.tcp匹配的基址”的错误。我已更改所有基址以反映您的建议。现在这是我的配置:
<service behaviorConfiguration="transferServiceBehavior" name="API.FileTransfer.FileTransferService">
<endpoint name="MyJSONFileTransferEP"
address="json"
binding="webHttpBinding"
bindingConfiguration="jsonWeb"
behaviorConfiguration="WebHttpEPBehavior"
contract="API.FileTransfer.IJSONFileTransferService" />
<endpoint name="MyPOXFileTransferEP"
address="pox"
behaviorConfiguration="WebHttpEPBehavior"
binding="webHttpBinding"
bindingConfiguration="poxWeb"
contract="API.FileTransfer.IPOXFileTransferService" />
<endpoint name="MySOAPFileTransferEP"
address="filetransfer"
binding="netTcpBinding"
bindingConfiguration="netTcpWeb"
behaviorConfiguration="NetTcpEPBehavior"
contract="API.FileTransfer.ISOAPFileTransferService" />
<endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange"/>
<host>
<baseAddresses>
<add baseAddress="net.tcp://localhost:2544/filetransfer/" />
</baseAddresses>
</host>
</service>
我已经尝试过"net.tcp://localhost:2544"和"net.tcp://localhost:8001"两种方式。
我需要在防火墙设置中添加(允许)一些内容吗?还有其他建议吗?
这是我的App.config文件中filetransferservice的mexTcpBinding:
<endpoint address="net.tcp://localhost:2544/filetransfer/mex"
binding="mexTcpBinding" bindingConfiguration="" contract="IMetadataExchange"
name="filetransfermex">
<identity>
<certificateReference storeName="My" storeLocation="LocalMachine"
x509FindType="FindBySubjectDistinguishedName" />
</identity>
</endpoint>
我仍然无法在我的Web应用程序中引用FileTransferServiceClient。
再次感谢。