Tuesday, 10 September 2013

WCF webservice needs to listen on 2 ports iisexpress. TCP error code 10061

WCF webservice needs to listen on 2 ports iisexpress. TCP error code 10061

We have a wcf webservice that an external client will be using to provide
requests. This webservice (the webservice) calls another wcf service ( the
agent) where the business logic is implemented.
The agent also monitors activity in the database and when the requested
information is ready (often days later) the agent generates an object
containing the requested data. It needs to pass the object to the
webservice where the webservice will form XML and post it to the clients
webservice.
The webservice implements two different imterfaces, one that the client
uses and one that the agent uses.
The trouble is, on the local machine, I am unable to get the agent to
connect to the webservice to send the results. Both the webservice and the
agent are running on my local machine for debugging purposes. In
VisualStudio2012, the webservice project is set up to use IISExpress and
defines a specific port to use. Project URL:
https://local.someaddress.net:51448/ However, the port the agent uses to
try to connect to the webservice is a different port.
The webservice is able to call the agent just fine, but the agent gets a
tcp error code 10061 when it tries to call the webservice.
I've already tried "appcmd.exe set app "Default Web Site/"
/enabledProtocols:http,net.tcp".
Is it possible to configure IISExpress to have the webservice open both
ports? Or is there something obvious I am missing here?
(Since the config files contain links to localhost and stackoverflow
doesn't allow that, I have replaced localhost with local.someaddress.net.)
Here are the contents of the webservice's web.config:
<?xml version="1.0"?>
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.5" />
<httpRuntime targetFramework="4.5" maxRequestLength="52428800"/>
</system.web>
<system.serviceModel>
<client>
<endpoint
address="net.tcp://local.someaddress.net:8102/Acord/201307"
behaviorConfiguration="NetTcpCertificatesBehavior"
binding="netTcpBinding"
bindingConfiguration="NetTcpCertificatesBinding"
contract="AcordContract.IAcordService201307" name="AcordEndpoint">
<identity>
<certificateReference
findValue="7da522dd75f3fca2687837b7b67e117a8700ec62"
isChainIncluded="false" storeLocation="LocalMachine"
x509FindType="FindByThumbprint" />
</identity>
</endpoint>
</client>
<services>
<service name="AcordWebService.AcordWebService"
behaviorConfiguration="Visible">
<endpoint address="" binding="basicHttpsBinding"
contract="AcordWebService.IAcordWebService"
bindingConfiguration="BasicHttpsBinding">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpsBinding"
contract="IMetadataExchange" />
<!--binding for clients outside the firewall calling from C# with
WCF using certs -->
<endpoint
address="net.tcp://local.someaddress.net:8122/AcordWebService/201309"
binding="netTcpBinding"
bindingConfiguration="NetTcpCertificatesBinding"
name="NetTcpCertificatesEndpoint"
contract="AcordWSContract.IAcordWSService201309">
<identity>
<dns value="localhost"/>
</identity>
</endpoint>
</service>
</services>
<behaviors>
<endpointBehaviors>
<behavior name="NetTcpCertificatesBehavior">
<clientCredentials>
<clientCertificate
findValue="631f5a67a9a70bc78540bb809e73fd1dbd00bbeb"
storeLocation="LocalMachine" storeName="My"
x509FindType="FindByThumbprint" />
<serviceCertificate>
<authentication certificateValidationMode="None" />
</serviceCertificate>
</clientCredentials>
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="Visible">
<!-- To avoid disclosing metadata information, set the values
below to false before deployment -->
<serviceMetadata httpGetEnabled="false" httpsGetEnabled="true"/>
<!-- To receive exception details in faults for debugging
purposes, set the value below to true. Set to false before
deployment to avoid disclosing exception information -->
<serviceDebug includeExceptionDetailInFaults="true"/>
<serviceCredentials>
<serviceCertificate
findValue="7da522dd75f3fca2687837b7b67e117a8700ec62"
storeLocation="LocalMachine" storeName="My"
x509FindType="FindByThumbprint"/>
<clientCertificate>
<certificate
findValue="631f5a67a9a70bc78540bb809e73fd1dbd00bbeb"
storeLocation="LocalMachine" storeName="My"
x509FindType="FindByThumbprint"/>
</clientCertificate>
</serviceCredentials>
</behavior>
</serviceBehaviors>
</behaviors>
<bindings>
<basicHttpsBinding>
<binding name="BasicHttpsBinding" maxBufferPoolSize="2147483647"
maxBufferSize="2147483647" maxReceivedMessageSize="2147483647">
<security mode="Transport">
<transport clientCredentialType="None" />
</security>
</binding>
</basicHttpsBinding>
<wsHttpBinding>
<binding name="WSHttpBinding_IAcordWebService"
closeTimeout="00:01:00" openTimeout="00:01:00"
receiveTimeout="00:10:00" sendTimeout="00:01:00"
bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647"
useDefaultWebProxy="true" allowCookies="false">
<readerQuotas maxDepth="32" maxStringContentLength="65535"
maxArrayLength="16384" maxBytesPerRead="4096"
maxNameTableCharCount="16384" />
<security mode="Transport">
<transport clientCredentialType="None" />
</security>
</binding>
<binding name="WSHttpBinding_Mex" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00"
sendTimeout="00:01:00" bypassProxyOnLocal="false"
hostNameComparisonMode="StrongWildcard"
maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647"
useDefaultWebProxy="true" allowCookies="false">
<readerQuotas maxDepth="32" maxStringContentLength="65535"
maxArrayLength="16384" maxBytesPerRead="4096"
maxNameTableCharCount="16384" />
<security mode="Transport">
<transport clientCredentialType="None" />
</security>
</binding>
</wsHttpBinding>
<netTcpBinding>
<binding name="NetTcpCertificatesBinding"
maxBufferPoolSize="2147483647" maxBufferSize="2147483647"
maxReceivedMessageSize="2147483647">
<security>
<transport clientCredentialType="Certificate"
protectionLevel="EncryptAndSign" />
</security>
</binding>
</netTcpBinding>
</bindings>
<protocolMapping>
<add binding="wsHttpBinding" scheme="https" />
</protocolMapping>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"
multipleSiteBindingsEnabled="true" />
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
<directoryBrowse enabled="true"/>
</system.webServer>
</configuration>
And here are the contents of the agent's app.config file:
<?xml version="1.0"?>
<configuration>
<configSections>
</configSections>
<system.serviceModel>
<client>
<endpoint
address="net.tcp://local.someaddress.net:8122/AcordWebService/201309"
behaviorConfiguration="NetTcpCertificatesBehavior"
binding="netTcpBinding"
bindingConfiguration="NetTcpCertificatesBinding"
contract="AcordWSContract.IAcordWSService201309"
name="AcordWSEndpoint">
<identity>
<certificateReference
findValue="7da522dd75f3fca2687837b7b67e117a8700ec62"
isChainIncluded="false" storeLocation="LocalMachine"
x509FindType="FindByThumbprint" />
</identity>
</endpoint>
<endpoint address="net.tcp://qaschedapp:8001/IMS/201210"
binding="netTcpBinding" bindingConfiguration="NetTcpWindowsBinding"
contract="IdentityManagementContract.IIdentityManagementService201210"
name="IMSEndpoint">
<!--the name above cannot be changed-->
<identity>
<dns value="localhost"/>
</identity>
</endpoint>
<endpoint address="net.tcp://qaschedapp:8012/CBS/201210"
behaviorConfiguration="NetTcpCertificatesBehavior"
binding="netTcpBinding"
bindingConfiguration="NetTcpCertificatesBinding"
contract="CrossbowContract.ICrossbowService201210"
name="CBSEndpoint">
<identity>
<certificateReference
findValue="7da522dd75f3fca2687837b7b67e117a8700ec62"
isChainIncluded="false" storeLocation="LocalMachine"
x509FindType="FindByThumbprint"/>
</identity>
</endpoint>
</client>
<diagnostics performanceCounters="Default"/>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpWindowsBinding">
<security mode="Transport">
<transport clientCredentialType="Windows"/>
</security>
</binding>
</basicHttpBinding>
<netTcpBinding>
<binding>
<readerQuotas maxDepth="32" maxStringContentLength="65535"
maxArrayLength="16384" maxBytesPerRead="4096"
maxNameTableCharCount="16384"/>
</binding>
<binding name="NetTcpWindowsBinding" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:01:00"
sendTimeout="00:10:00" transactionFlow="false"
transferMode="Buffered" transactionProtocol="OleTransactions"
hostNameComparisonMode="StrongWildcard" listenBacklog="10"
maxBufferPoolSize="2147483647" maxBufferSize="2147483647"
maxConnections="10" maxReceivedMessageSize="2147483647">
<readerQuotas maxDepth="32" maxStringContentLength="65535"
maxArrayLength="16384" maxBytesPerRead="4096"
maxNameTableCharCount="16384"/>
<reliableSession ordered="true" inactivityTimeout="00:10:00"
enabled="false"/>
<security mode="Transport">
<transport clientCredentialType="Windows"
protectionLevel="EncryptAndSign"/>
<message clientCredentialType="Windows"/>
</security>
</binding>
<binding name="NetTcpCertificatesBinding"
maxBufferPoolSize="2147483647" maxBufferSize="2147483647"
maxReceivedMessageSize="2147483647">
<security>
<transport clientCredentialType="Certificate"
protectionLevel="EncryptAndSign"/>
</security>
</binding>
</netTcpBinding>
</bindings>
<services>
<service name="AcordAgent.AcordService"
behaviorConfiguration="AcordServiceBehavior">
<endpoint address="http://qaschedapp:8100/Acord"
binding="webHttpBinding"
behaviorConfiguration="HttpWebGetBehavior"
contract="AcordContract.IMeta" name="MetaEndpoint">
<!--the name of this endpoint above (MetaEndpoint) must stay-->
</endpoint>
<!--binding for clients within the firewall calling from C# with
WCF -->
<endpoint address="net.tcp://qaschedapp:8101/Acord/201307"
binding="netTcpBinding"
bindingConfiguration="NetTcpWindowsBinding"
name="NetTcpWindowsEndpoint"
contract="AcordContract.IAcordService201307">
<identity>
<dns value="localhost"/>
</identity>
</endpoint>
<!--binding for clients outside the firewall calling from C# with
WCF using certs -->
<endpoint address="net.tcp://qaschedapp:8102/Acord/201307"
binding="netTcpBinding"
bindingConfiguration="NetTcpCertificatesBinding"
name="NetTcpCertificatesEndpoint"
contract="AcordContract.IAcordService201307">
<identity>
<dns value="localhost"/>
</identity>
</endpoint>
</service>
</services>
<behaviors>
<endpointBehaviors>
<behavior name="HttpWebGetBehavior">
<webHttp/>
</behavior>
<behavior name="NetTcpCertificatesBehavior">
<clientCredentials>
<clientCertificate
findValue="631f5a67a9a70bc78540bb809e73fd1dbd00bbeb"
storeLocation="LocalMachine" storeName="My"
x509FindType="FindByThumbprint"/>
<serviceCertificate>
<authentication certificateValidationMode="None"/>
</serviceCertificate>
</clientCredentials>
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="AcordServiceBehavior">
<serviceDebug includeExceptionDetailInFaults="true"/>
<serviceCredentials>
<serviceCertificate
findValue="7da522dd75f3fca2687837b7b67e117a8700ec62"
storeLocation="LocalMachine" storeName="My"
x509FindType="FindByThumbprint"/>
<clientCertificate>
<certificate
findValue="631f5a67a9a70bc78540bb809e73fd1dbd00bbeb"
storeLocation="LocalMachine" storeName="My"
x509FindType="FindByThumbprint"/>
</clientCertificate>
</serviceCredentials>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/>
</startup>
</configuration>

No comments:

Post a Comment