I currently develop several services (WCF) to work with TFS 2010.
Some of them use the event subscription tool, while others are consumed through the sharepoint portal, small wpf applications, etc.
I'm working on an application to administer some stuff in another server, such as send an IIS Reset request to the server, and I'm using wsDualHttpBinding so I can message the user the progress as everything happens, through callbacks.
But I can't even call the method in the service, because whenever the channel tries to open, I get timeout exceptions, no matter what my OpenTimeout is.
This is my config (client-side)
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.net>
<connectionManagement>
<add maxconnection="200" address="*" />
</connectionManagement>
</system.net>
<system.serviceModel>
<bindings>
<wsDualHttpBinding>
<binding name="WSDualHttpBinding_IReset" closeTimeout="00:01:00"
openTimeout="00:02:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<reliableSession ordered="true" inactivityTimeout="00:10:00" />
<security mode="None">
<message clientCredentialType="Windows" negotiateServiceCredential="true" />
</security>
</binding>
</wsDualHttpBinding>
<wsHttpBinding>
<binding name="WSHttpBinding_IDeploy" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
maxBufferPoolSize="1524288" maxReceivedMessageSize="1279748152"
messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"
allowCookies="false">
<readerQuotas maxDepth="32" maxStringContentLength="81925" maxArrayLength="163848"
maxBytesPerRead="9192" maxNameTableCharCount="16384" />
<reliableSession ordered="true" inactivityTimeout="00:10:00"
enabled="false" />
<security mode="None">
<transport clientCredentialType="Windows" proxyCredentialType="None"
realm="" />
<message clientCredentialType="Windows" negotiateServiceCredential="true" />
</security>
</binding>
</wsHttpBinding>
</bindings>
<client>
<endpoint address="http://tfsserver:8080/TFSFacade/DeployFacade.svc"
binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IDeploy"
contract="DeployFacade.IDeploy" name="WSHttpBinding_IDeploy" />
<endpoint address="http://tfsserver:8080/DeployService/ResetService.svc"
binding="wsDualHttpBinding" bindingConfiguration="WSDualHttpBinding_IReset"
contract="ResetService.IReset" name="WSDualHttpBinding_IReset" />
</client>
</system.serviceModel>
<appSettings>
<add key="CopiaLocalRollback" value="true"/>
<add key="CopiaLocalPublish" value="true"/>
<add key="ModoDiagnostico" value="false" />
<add key="TempoTimeout" value="300000" />
</appSettings>
</configuration>
Server-side:
<?xml version="1.0"?>
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0" />
</system.web>
<system.serviceModel>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" aspNetCompatibilityEnabled="true">
<baseAddressPrefixFilters>
<add prefix="http://tfsserver:8080"/>
<add prefix="http://tfsservices:8080"/>
<add prefix="http://tfsservices:1001"/>
</baseAddressPrefixFilters>
</serviceHostingEnvironment>
<bindings>
<wsDualHttpBinding>
<binding name="WSDualHttpBinding_ResetService" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<reliableSession ordered="true" inactivityTimeout="00:10:00" />
<security mode="None">
<message clientCredentialType="Windows" negotiateServiceCredential="true" />
</security>
</binding>
</wsDualHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="EventServiceBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
<behavior name="">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service behaviorConfiguration="EventServiceBehavior" name="DeployService.ResetService">
<endpoint address="" binding="wsDualHttpBinding" bindingConfiguration="WSDualHttpBinding_ResetService"
contract="DeployService.Contracts.IReset" />
</service>
</services>
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>
</configuration>
Contracts:
[ServiceContract(SessionMode = SessionMode.Required,
CallbackContract = typeof(IResetCallback))]
public interface IReset
{
[OperationContract]
void ExecutarIISReset();
}
[ServiceContract]
public interface IResetCallback
{
[OperationContract(IsOneWay = true)]
void PumpMessage(string message);
[OperationContract(IsOneWay = true)]
void PumpResponsiveMessage(ResponsiveMessage message);
[OperationContract(IsOneWay = true)]
void PumpLogDeployBEMessage(LogDeployBE message);
bool Confirmar();
ServidorModel[] GetServidores();
}
Service (Not posting the code since the problem happens before it's reached):
[AspNetCompatibilityRequirementsAttribute(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple)]
public class ResetService : IReset
{
//Stuff here
}
In fiddler I get this on client-side:
7 202 HTTP tfsserver:8080 /DeployService/ResetService.svc 0 private resetman.vshost:9000
I get 202 several times, then time passes and the timeout occurs
Running fiddle on the server, I get absolutely nothing.
What may be happening?
EDIT: Weird, localhost works. Does wsDualHttpBinding need special permissions or something? Didn't find anything on the 'internets'