I have moved my file transfer service from basicHttpBinding to netTcpBinding
as I am trying to set up a duplex mode channel. I have also started my net.tcp
port sharing service.
I am currently in dev and am self hosting on an xp box until we move the
app to a dev server. so, for now, I do not have access to IIS.
After configuring my service as such:
<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>
And, my binding as such:
<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>
I get the folloing error when I right and browser to the SVC file:
Could not find a base address that
matches scheme net.tcp for the
endpoint with binding NetTcpBinding.
Registered base address schemes are
[http].
The reading online suggests that, in order to fix this problem, i
needed to add the net.tcp binding to the binding of the application
in IIS. But, what do I do if I am self hosting and do not have access to
IIS?? By the way, if you are reading this and "do" have IIS, do the following:
Right click the virtual directory/application in IIS -> Manage application ->
Advanced settings. And, in the Enabled Protocols part, add net.tcp.
Any ideas?
UPDATE: I thought I had it working but it's still not working. Here is what I have now:
I am still getting the "could not find base address that matches scheme net.tcp" error.
I have changed all my base addresses to reflect your suggestion. Here is what I have now:
<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>
I have tried this with both "net.tcp://localhost:2544" & "net.tcp://localhost:8001".
Do I need to add (allow) something in my firewall settings? Any other suggestions?
Here is my filetransferservice's mexTcpBinding in my App.config file:
<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>
I am still unable to reference my FileTransferServiceClient in my web app.
Thanks again.
See Question&Answers more detail:
os