0

我正在尝试在我的 c# 应用程序中设置 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();

谢谢,彼得

4

2 回答 2

1

您将另一个答案标记为“已接受”,但您所指的链接谈论的是流媒体订阅。这些仅适用于 Exchange 2010 及更高版本。对于那些坚持使用 Exchange Server 2007 的人,CodePlex 上有一个Push-Notification 库

于 2012-12-20T11:54:08.653 回答
1

您可以使用 Microsoft.Exchange.WebServices.Data(EWS 托管 API 参考)

http://msdn.microsoft.com/en-us/library/dd633710%28v=EXCHG.80%29.aspx

于 2011-02-02T13:21:10.387 回答