返回首页

简介
Exchange 2007中引入新的编程模型,通过使用Web服务。该API被称为Exchange Web服务(EWS)。易于使用的新的编程模型,SDK中的一个很好的文件,也是一个很好的学习曲线。通知
通知时提出一项具体活动发生在Exchange的特定资源的事件。最明显的情况是,当你要监视一个特定的邮件框。联交所已通知方法;被动和主动通知:拉通知(被动的做法):建立您的应用程序,以便它要求交换时间约所需的资源发生的任何事件的每一个特定时期。推送通知(积极的态度):交易所将通知您已发生和发送通知到您的应用程序通过一个自定义的Web服务(您构建一个Web服务)变化。
(拉力或推力)通知这些都需要您订阅所需的事件,使交易所可以生成所需的通知将发送到您的应用程序。早期预警系统编程和类型
EWS的区分两种类型的资源文件夹和项目。一个项目可能是一条消息,联系人,任务等??所以,在此示例的通知监测的收件箱文件夹。
对EWS的编程是通过请求和响应。
您创建(请求)。然后,使用ExchangeBindingService,您发送的请求和返回(响应),你成功的测试。动机
SDK中的样本包括推送通知订户项目和客户端Web服务项目消耗的外汇通知。
以为你可能没有安装IIS,你必须构建一个Web服务,您的应用程序和交易所通知之间的桥梁,让我不舒服的有关情况。 EWS使用SOAP消息的所有时间。所以,我想通了,使用WCF服务将是一个不错的的功能,以互动的通知。 WCF服务可以在任何应用程序托管,将其余的作品在您的软件集成。注释
推"通知客户端,这是从NotificationServices.w​​sdl生成的SDK中包含的Interfaces.cs。要重新生成相同的文件,你必须借用M​​essages.XSD和Exchange文件夹在服务器Types.XSD。

Wsdl /si NotificationService.wsdl Messages.xsd Types.xsd

,但生成的WCF代码,你需要运行svcutil。{C}
你的类继承生成的类中schemas.microsoft.com.exchange.services.2006.messages.cs。
NotificationServicePortType比在样品中Interfaces.cs的类是不同的,但不要惊慌;这是一个包装所需的类型。 WCF会处理所有的问题,一旦我们调整端点配置。运行演示
,你应该知道,您的WCF可以在另一台计算机上运行。您应该添加在所选择的端口的Windows防火墙例外或禁用防火墙。请参阅计算机名,如果交易所和WCF服务在单独的机器,否则使用localhost。确保/ EWS的文件夹存在于IIS和其网站上运行,并确保它使用的端口。很多的错误,将相关的URL的大部分时间。WCF如何行为像一个Web服务
端点配置必须配置准确地做出像Web服务的WCF的行为,让交换呼叫SendNotification方法正确。
这部分在App.config文件中:
<endpoint address=""           

  contract="NotificationServicePortType" 

  binding="basicHttpBinding"

  bindingName="NotificationServiceBinding"

  bindingNamespace="http://schemas.microsoft.com/exchange/services/2006/messages"

/>
历史版本1.0。

回答

评论会员:JamesQ 时间:2011/12/15
这是应用程序与Exchange 2010的版本兼容
评论会员:?thepsion 时间:2011/12/15

评论会员:rowmark 时间:2011/12/15
您好,
目前程序运行时,如果一个新的电子邮件到达时,我得到通知, NewMailEvent。取而代之的是有没有办法,我可以显示的主题,我想补充阅读附件等功能
感谢张贴此一吨
评论会员:。rowmark 时间:2011/12/15
我已​​经配置正确,我订阅的事件。现在,我想拿到项目,这是有可能得到事件"CurrentNotification_EventName"项目
评论会员:。rowmark 时间:2011/12/15
沙赫扎德,
你是否能得到它的工作吗?
我也尝试做同样的事情,但卡住了。当我运行程序,它显示了作为NewemailEvent eventname但不是实际的消息。

不要让我知道,如果你得到了它的工作
评论会员:?最大孟德尔 时间:2011/12/15
是我没有,但其为一个邮箱帐户我有多个邮箱订阅事件不能区分这里面的邮箱是与。参见下面的代码。

EWS_WCF_Notification.ExchangeEventArgs EE =(EWS_WCF_Notification.ExchangeEventArgs)E;
(ee.EventName!="NewMailEvent")
返回
EWS_WCF_Notification.Notification通知=(EWS_WCF_Notification.Notification)发件人;
NotificationType NF =(NotificationType)notification.notification
  ; ITEMID ID =新ITEMID(((ItemIdType)(((BaseObjectChangedEventType)(nf.Items [0]))项目))ID。)

AlternateId Id2007 =新AlternateId()
Id2007.UniqueId = id.UniqueId;
Id2007.Format = IdFormat.EwsLegacyId;
Id2007.Mailbox ="emailID@domain.com";
 60;
 0; ExchangeService服务= GetService的(); / /连接exchangeservice
AlternateId援助=(AlternateId)service.ConvertId((AlternateId)Id2007,IdFormat.EwsId)
字符串CID = aid.UniqueId;
/ / ID =援助;
逐项= Item.Bind(服务,CID,PropertySet.FirstClassProperties);
item.Body.BodyType = Microsoft.Exchange.WebServices.Data.BodyType.Text;

listBox1.Items.Add(item.Body.Text);  60;
(项目EmailMessage)
{
EM = EmailMessage(EmailMessage)项目;
listBox1.Items.Add(em.ToRecipients [0]的地址。)
  ;
listBox1.Items.Add(em.ReceivedBy.Address);  60;
listBox1.Items.Add(em.Subject); }

你必须重新与Exchange服务器每次事件发生时。 ITEMID你投sender对象notificationtype声明为公共notificationtype在通知类。BR}
如果你知道怎么能这样对多个邮箱的工作,然后PLZ让我知道
评论会员:。rowmark 时间:2011/12/15
沙赫扎德,
非常感谢您。我一定会尝试,让你知道。

再次感谢
评论会员:。rowmark 时间:2011/12/15
这个代码Shahzad撰文。我粘贴在CurrentNotification_EventName方法,并宣布在通知作为公共类的通知方法,但我仍然得到吨的错误消息说,通知方法是人迹罕至,名称IdFormat不退出等

我这里缺少一些基本的
评论会员:?rajendrakumar4u 时间:2011/12/15
变量是其他需要公开申报,并确保您这样的声明通知通知类变量作为公共
公共NotificationType通知;

如果仍然没有能够得到适当的转换,然后将其粘贴在这里的错误。如果你投我肯定错误消息的其余部分将解决
评论会员:brahan_k_v 时间:2011/12/15
Shahzad.Aslam,
感谢所有帮助。我有几个问题:

当我运行的服务和认购一个邮箱,邮件到达时,它显示的是ID,主题等
但由于某些原因,有时是读相同的电子邮件,有时高达4至5倍,或它会抛出在这条线
错误逐项= Item.Bind(服务,CID,PropertySet.FirstClassProperties);
Soapexception处理未发现的资源或那样的东西。
"没有发现指定的对象是在商店"

任何想法
评论会员:?gkriggs 时间:2011/12/15
最大,
我同样的问题,当我试图。你需要做到以下几点:

添加引用DLL Microsoft.Exchange.WebServices
如果你还没有下载,你需要下载它。
在微软下载搜索
希望这有助于
评论会员:bittondb 时间:2011/12/15
我有订阅服务successfuly但尝试运行WCF服务时,它显示了以下线
错误MyHost.Open()
"HTTP无法注册网址http://:80/PushNotificationClient /因为TCP端口80是由另一个应用程序中使用"
我已经给地址http://192.168.4.108:7374/PushNotificationClient/
防火墙设置关闭和已添加端口:7374。但仍然得到错误。

感谢
评论会员:vacmkrishh 时间:2011/12/15
你好,我是新来交换服务器编程和使用本文中给出的源代码,
我的要求是与perticular主题的新邮件到达时执行的工作流,但我订阅ExchangeServerBindings PLS帮助的方法外,要解决这个,

- Exchange Server安装在同一系统上,
- 我能创造一个OutLookMeeting使用ExchangeServerBindings的CreateItem方法,
我给这里的异常的详细信息,以便您可以知道在哪里异常
来System.Net.WebException未处理
消息=无法连接到远程服务器
来源=
堆栈跟踪:
在System.Net.HttpWebRequest.GetRequestStream()
System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(字符串methodName中,对象[]参数)
WCFServiceHost.EWSProxy.ExchangeServiceBinding.Subscribe(SubscribeType Subscribe1)在C:\文件和设置\ rajendrako \桌面\ EWS_WCF_CP2 \ EWS_WCF_CP \ WCFServiceHost \ Web引用\ EWSProxy \ Reference.cs:711线
在WCFServiceHost.Form1.button1_Click(对象发件人,EventArgs的Ë)在C:\ Documents和Settings \ rajendrako \桌面\ EWS_WCF_CP2 \ EWS_WCF_CP \ WCFServiceHost \ Form1.cs中:行116
System.Windows.Forms.Control.OnClick(级E)
System.Windows.Forms.Button.OnClick(级E)
System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
  ; System.Windows.Forms.Control.WmMouseUp(Messageamp米,MouseButtons按钮,Int32的点击)
System.Windows.Forms.Control.WndProc(Messageamp米)
&# 160; System.Windows.Forms.ButtonBase.WndProc(Messageamp米)
System.Windows.Forms.Button.WndProc(Messageamp米)
System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Messageamp米)
System.Windows.Forms.Control.ControlNativeWindow.WndProc(Messageamp米)
在System.Windows.Forms.NativeWindow.DebuggableCallback(HWND的IntPtr,Int32的味精,IntPtr的WPARAM,IntPtr的LPARAM)
System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSGamp MSG)
在dwComponentID的Int32,Int32的原因,pvLoopData)
System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32的原因,ApplicationContext的情况下)
System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32的原因,ApplicationContext的情况下)
System.Windows.Forms.Application.Run(表格的MainForm)
WCFServiceHost.Program.Main()在C:\ Documents和Settings \ rajendrako \桌面\ EWS_WCF_CP2 \ EWS_WCF_CP \ WCFServiceHost \的Program.cs:行17
(System.AppDomain._nExecuteAssembly大会大会,字串[] args)
System.AppDomain.ExecuteAssembly(弦乐assemblyFile,证据assemblySecurity,字串[] args)
在Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
&# 160; System.Threading.ThreadHelper.ThreadStart_Context(对象状态)
System.Threading.ExecutionContext.Run(,ContextCallback回调对象状态的ExecutionContext的ExecutionContext)
在System.Threading.ThreadHelper.ThreadStart()
的InnerException:System.Net.Sockets.SocketException
消息= A连接尝试失败,由于连接方没有正确响应一段时间后,或已建立的连接失败,因为连接的主机没有反应,172.124.33.10:443
来源=
  ; 错误代码= 10060
NativeErrorCode = 10060
堆栈跟踪:
System.Net.Sockets.Socket.DoConnect(端点endPointSnapshot,SocketAddress的SocketAddress的)
 60; System.Net.Sockets.Socket.InternalConnect(端点remoteEP)
System.Net.ServicePoint.ConnectSocketInternal(布尔connectFailure,插座插座S4,S6,Socketamp; IPAddressamp插座,地址,ConnectSocketState国家,Int32的超时,Exceptionamp的IAsyncResult asyncResult;除外)
的InnerException:
评论会员:ReeY 时间:2011/12/15
您好,

我运行示例下面的异常。

"System.ServiceModel.FaultException行动"的消息无法在接收处理,这可能是由于在ContractFilter不匹配的EndpointDispatcher因为合同不匹配(发送方和接收方之间的不匹配操作)或绑定/的。安全发送者和接收者之间的不匹配。检查发送者和接收者有相同的合同和相同的绑定(包括安全要求,例如消息,交通运输,无)。"

我上运行交换2K10公测样品,并在Visual Studio 2005编译。我怎样才能解决这个异常?代理类,应再次产生交流2K10?


Brahan
评论会员:艾哈迈德萨迪克 时间:2011/12/15
我相同的错误消息也对Exchange 2010的运行时。
有其他人遇到这个,发现它的解决方案?

格雷格
评论会员:rowmark 时间:2011/12/15
下载源代码链接在404