我正在尝试在我的c#app中设置EWS的推送通知。
从服务器获取响应并使用NetworkStream读取后,我需要在SOAP消息中使用Ok响应服务器。我能找到的唯一例子是使用Microsoft.Web.Services3和SoapEnvelope。我的理解是,现在已经被WCF取代了,我真的想使用更新的技术(学习它们)。
我如何通过将SOAP消息发送回服务器,大概使用与我收到通知相同的NetworkStream?
这是我尝试过的一些代码,但由于某种原因它失败了。
const string RESPONSE_OK = "<?xml version=\"1.0\" encoding=\"utf-8\"?><soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope\"><soap:Body>" +
"<SendNotificationResult xmlns=\"http://schemas.microsoft.com/exchange/services/2006/messages\">" +
"<SubscriptionStatus>OK</SubscriptionStatus></SendNotificationResult></soap:Body></soap:Envelope>";
responseBytes = encoding.GetBytes(RESPONSE_OK);
// Send the result
HTTPResponseStruct _httpResponse;
_httpResponse.version = "HTTP/1.1";
_httpResponse.BodyData = responseBytes;
_httpResponse.Headers = new Hashtable();
_httpResponse.Headers.Add("Server", "IT12");
_httpResponse.Headers.Add("Date", DateTime.Now.ToString("r"));
_httpResponse.Headers.Add("Content-Type", "text/xml; charset=utf-8");
_httpResponse.Headers.Add("Content-Length", _httpResponse.BodyData.Length);
_httpResponse.Headers.Add("Connection", "close");
string HeadersString = _httpResponse.version + " "
+ "200 OK" + "\r\n";
foreach (DictionaryEntry Header in _httpResponse.Headers)
{
HeadersString += Header.Key + ": " + Header.Value + "\r\n";
}
HeadersString += "\r\n";
byte[] bHeadersString = Encoding.ASCII.GetBytes(HeadersString);
// Send headers
clientStream.Write(bHeadersString, 0, bHeadersString.Length);
// Send body
if (_httpResponse.BodyData != null)
clientStream.Write(_httpResponse.BodyData, 0,
_httpResponse.BodyData.Length);
// clientStream.Write(responseBytes, 0, responseBytes.Length);
clientStream.Flush();
谢谢, 彼得
答案 0 :(得分:1)
您可以使用Microsoft.Exchange.WebServices.Data(EWS托管API参考)
http://msdn.microsoft.com/en-us/library/dd633710%28v=EXCHG.80%29.aspx
答案 1 :(得分:1)
您将另一个答案标记为“已接受”,但您所指的链接是关于流式订阅的。这些仅适用于Exchange 2010及更高版本。对于那些坚持使用Exchange Server 2007的人来说,CodePlex上有Push-Notification library。