Я переместил свою службу передачи файлов с 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, я получаю следующую ошибку:
Не удалось найти базовый адрес, соответствующий схеме net.tcp для конечной точки с привязкой NetTcpBinding. Зарегистрированные схемы базовых адресов: [http].
В онлайн-чтении говорится, что для решения этой проблемы мне нужно было добавить привязку net.tcp к привязке приложения в IIS. Но что мне делать, если я использую собственный хостинг и не имею доступа к 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". Нужно ли мне что-то добавлять (разрешать) в настройках моего брандмауэра? Есть другие предложения?
Вот моя привязка mexTcpBinding для filetransferservice в моем файле App.config:
<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>
Я все еще не могу ссылаться на свой FileTransferServiceClient в своем веб-приложении.
Еще раз спасибо.