WSE 3.0 을 로컬에서만 테스트 하다가, 머신을 분리하게 되면 겪게 되는 현상입니다. (이 현상은 로컬에서 조차도 발생하는 문제입니다.)
저도 아직 이 부분에 대한 뚜렷한 이유는 설명해드릴 수 없습니다. 웹에서도 해당 현상에 대해서 적절한 설명을 찾을 수가 없었는데, 혹시나 아시는 분 계시면 ^^ 댓글 좀 부탁드립니다.
따라서, 이 부분은 WSE 3.0 으로 프로그램하시면 반드시 지켜주셔야 하는데요.
서버 대기 주소와 클라이언트의 접속 주소를 "동일"하게 유지하라.
입니다. 감이 안 오실텐데요. ^^ 코드로 살펴보도록 하겠습니다.
우선, 서버측에서는 서비스를 대기하기 위해서 다음과 같이 작성하게 됩니다.
Uri listenAddress = new Uri("soap.tcp://localhost/HelloService");
SoapReceivers.Add(new EndpointReference(listenAddress), typeof(HelloService));
위와 같이 서비스를 작성했다면 원격 컴퓨터에 있는 클라이언트에서는 다음과 같이 서비스를 접근하려 할텐데요.
HelloService service = new HelloService();
service.Url = "soap.tcp://192.168.1.100/HelloService";
서버는 "localhost" 로 대기하고, 클라이언트는 "192.168.1.100" 으로 접근하고 있는데요. 바로 이와 같이 접속 주소가 다르게 되면 오류가 발생하게 됩니다. 따라서 이런 경우에는 서버측의 대기 주소를 다음과 같은 식으로 수정해 주셔야 합니다.
Uri listenAddress = new Uri("soap.tcp://192.168.1.100/HelloService");
심지어, 같은 로컬 컴퓨터에서조차도 "localhost" 로 대기하고, "127.0.0.1" 로 접속해도 오류가 발생합니다.
다음의 2가지 오류 메시지는 위에서 설명한 것처럼 주소가 달라질때 발생하는 것들입니다.
[오류 메시지 1]
Unhandled Exception: Microsoft.Web.Services3.AsynchronousOperationException:
WSE101: An asynchronous operation raised an exception.
---> System.Net.Sockets.SocketException:
No connection could be made because the target machine actively refused it
Server stack trace:
at Microsoft.Web.Services3.Messaging.SoapTcpConnection.Connect()
at Microsoft.Web.Services3.Messaging.SoapTcpConnection..ctor(Uri remoteEndpoint, SoapTcpTransportOptions options, ISoapFormatter formatter)
at Microsoft.Web.Services3.Messaging.SoapTcpTransport.CreateConnection(Uri transportAddress)
at Microsoft.Web.Services3.Messaging.SoapTcpTransport.GetConnection(Uri destination)
at Microsoft.Web.Services3.Messaging.SoapTcpOutputChannel.Send(SoapEnvelope message)
at System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage(IntPtr md, Object[] args, Object server, Int32 methodPtr, Boolean fExecuteInContext, Object[]& outArgs)
at System.Runtime.Remoting.Messaging.StackBuilderSink.PrivateProcessMessage(RuntimeMethodHandle md, Object[] args, Object server, Int32 methodPtr, Boolean fExecuteInContext, Object[]& outArgs)
at System.Runtime.Remoting.Messaging.StackBuilderSink.AsyncProcessMessage(IMessage msg, IMessageSink replySink)
Exception rethrown at [0]:
at System.Runtime.Remoting.Proxies.RealProxy.EndInvokeHelper(Message reqMsg,Boolean bProxyCase)
at System.Runtime.Remoting.Proxies.RemotingProxy.Invoke(Object NotUsed, MessageData& msgData)
at Microsoft.Web.Services3.Messaging.SoapOutputChannel.SendDelegate.EndInvoke(IAsyncResult result)
at Microsoft.Web.Services3.Messaging.SoapOutputChannel.EndSend(IAsyncResult result)
at Microsoft.Web.Services3.WebServicesClientAsyncResult.OnSendComplete(IAsyncResult result)
--- End of inner exception stack trace ---
at Microsoft.Web.Services3.AsyncResult.End(IAsyncResult result)
at Microsoft.Web.Services3.Xml.SoapEnvelopeReaderWrapper..ctor(SoapClientMessage message, String messageContentType)
at Microsoft.Web.Services3.WebServicesClientProtocol.GetReaderForMessage(SoapClientMessage message, Int32 bufferSize)
at System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage message, WebResponse response, Stream responseStream, Boolean asyncCall)
at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters)
at HelloService.HelloWorld() in D:\temp\ConsoleHostService\WSE30Consumer\HelloService.cs:line 43
at WSE30Consumer.Program.Main(String[] args) in D:\temp\ConsoleHostService\WSE30Consumer\Program.cs:line 15
[오류 메시지 2]
Unhandled Exception: System.Web.Services.Protocols.SoapHeaderException: Destination Unreachable
at System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage message, WebResponse response, Stream responseStream, Boolean asyncCall)
at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters)
at HelloService.HelloWorld() in D:\temp\ConsoleHostService\WSE30Consumer\HelloService.cs:line 43
at WSE30Consumer.Program.Main(String[] args) in D:\temp\ConsoleHostService\WSE30Consumer\Program.cs:line 22
[이 토픽에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]