Я перевел мою службу передачи файлов из basicHttpBinding в netTcpBinding поскольку я пытаюсь настроить канал дуплексного режима. Я также начал работу с net.tcp службы обмена портами.
В настоящее время я нахожусь в dev и сам хостинг на коробке xp, пока мы не переместим приложения к серверу dev. поэтому на данный момент у меня нет доступа к 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].
Чтение онлайн предполагает, что для исправления этой проблемы i необходимо добавить привязку net.tcp к привязке приложения в ИИС. Но, что мне делать, если я сам хостинг и не имею доступа к 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". Нужно ли добавлять (разрешать) что-то в настройках брандмауэра? Любые другие предложения?
Вот мой filetransferservice mexTcpBinding в моем файле 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 в своем веб-приложении.
Еще раз спасибо.