【发布时间】:2014-05-13 07:23:51
【问题描述】:
我有一个 SOAP WCF Web 服务,它将一些 XML 消息转发到另一台机器上的 TCP 端口(通过 HttpWebRequest 帖子)。我们使用这个 Web 服务的原因是它可以很容易地配置为使用带有客户端和服务器证书的两种方式的 SSL。 它工作正常,除了在 HttpWebRequest 结束后我的 Web 服务没有向客户端发送 FIN 消息的部分(因为在那一侧收到了 FIN)。 Web 服务与客户端之间的连接仅因为客户端将在超时后(当 KeepAlive 为真时)或在收到答案后(当 KeepAlive 为假时)立即发送 FIN。所以连接结束总是由客户端发起的。
是否可以让 web 服务做连接的结束(让 web 服务发送 FIN 给客户端)?
我已经尝试过使用这样的事件处理程序,但运气不佳:
OperationContext.Current.OperationCompleted += DisconnectClientImmediatelyAfterResponseEventHandler;
private void DisconnectClientImmediatelyAfterResponseEventHandler(object sender, EventArgs e)
{
OperationContext.Current.Channel.Close();
}
这是我的 Post 操作的完整代码:
public Message Post(Message postRequest)
{
string bodyOfPostRequest = GetBodyContents(postRequest);
IHttpWebRequestWrap remoteRequest = CreateHttpWebRequest();
try
{
using (Stream remoteResponseStream = remoteRequest.Post(bodyOfPostRequest, RemoteRequestContentType))
{
string responseMessage = StreamToString(remoteResponseStream);
Message reply = CreateReplyMessage(postRequest.Version, postRequest.Headers.Action, responseMessage);
return reply;
}
}
catch (Exception ex)
{
_log.Fatal("The following exception occured.", ex);
throw;
}
}
remoteRequest.Post(...) 是一个扩展方法,它执行实际的发布。
【问题讨论】:
标签: c# asp.net web-services wcf soap