デュプレックス モード チャネルを設定しようとしているときに、ファイル転送サービスを 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] です。
オンラインで読むと、この問題を解決するには、net.tcp バインディングを IIS のアプリケーションのバインディングに追加する必要があることがわかります。しかし、セルフホスティングで IIS にアクセスできない場合はどうすればよいでしょうか?? ところで、これを読んで IIS を「持っている」場合は、次の手順を実行します。IIS で仮想ディレクトリ/アプリケーションを右クリック -> アプリケーションの管理 -> 詳細設定。そして、Enabled Protocols 部分に 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 を参照できません。
再度、感謝します。