1) Server:
Service interface:
PHP Code:
[OperationContract(Action = Service.RequestAction, ReplyAction = Service.ReplyAction)]
Message DoWork(Message name);
Implementation:
PHP Code:
public class Service : IService
{
public const string ReplyAction = "http://localhost/Service/Message_ReplyAction";
public const string RequestAction = "http://localhost/Service/Message_RequestAction";
public Message DoWork(Message requestXml)
{
using (StreamWriter writer = File.CreateText(@"E:\Projekti\WCF\WcfTestIIS\Service\Body.xml"))
{
writer.WriteLine(requestXml.ToString());
}
Message response = Message.CreateMessage(MessageVersion.Default, ReplyAction, requestXml.ToString());
return response;
}
}
web.config:
PHP Code:
<system.serviceModel>
<serviceHostingEnvironment>
<baseAddressPrefixFilters>
<add prefix="http://localhost:80/"/>
</baseAddressPrefixFilters>
</serviceHostingEnvironment>
<behaviors>
<serviceBehaviors>
<behavior name="Service.ServiceBehavior">
<serviceMetadata httpGetEnabled="true" httpGetUrl="http://localhost/Service/Service.svc" />
<serviceDebug includeExceptionDetailInFaults="true" />
<MyInspector />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service behaviorConfiguration="Service.ServiceBehavior" name="Service.Service">
<endpoint
address="http://localhost/Service/Service.svc"
binding="basicHttpBinding"
contract="Service.IService">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange" />
</service>
</services>
<extensions>
<behaviorExtensions>
<add name="MyInspector" type="Service.MessageInspectorExtension, Service, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
</behaviorExtensions>
</extensions>
</system.serviceModel>
2) Client:
PHP Code:
ServiceClient client = new ServiceClient();
string RequestAction = "http://localhost/Service/Message_RequestAction";
MessageVersion msgVersion = MessageVersion.CreateVersion(EnvelopeVersion.Soap11, AddressingVersion.None);
Message request = Message.CreateMessage(msgVersion, RequestAction, "Test message");
Message reply = client.DoWork(request);
client.Close();
web.config:
PHP Code:
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_IService" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false"
bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferSize="2147483647" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647"
messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true">
<readerQuotas maxDepth="32" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647"/>
<security mode="None">
<transport clientCredentialType="None" proxyCredentialType="None" realm=""/>
<message clientCredentialType="UserName" algorithmSuite="Default"/>
</security>
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint name="BasicHttpBinding_IService"
address="http://localhost/Service/Service.svc"
binding="basicHttpBinding"
bindingConfiguration="BasicHttpBinding_IService"
contract="ServiceReference.IService" />
</client>
</system.serviceModel>
As you can see I use basicHttpBinding on server side that uses Soap 1.1. That's why I've used the code above on client side to explicitly set Soap 1.1 as well (I'm not sure if that is right way).
I'm not sure why I'm getting the error:
"The underlying connection was closed: The connection was closed unexpectedly"
and how to get rid of it.
I appreciate any help.