如何使用 C# 读取 Exchange 2010 SP 1 公用文件夹

发布于 2024-11-18 20:53:30 字数 5833 浏览 2 评论 0原文

我正在尝试读取 ExchangeServer 2010 SP1 中托管的公用文件夹。好吧,我可以连接,但是当我尝试读取该文件夹时,我收到了奇怪的错误。希望有人能够分享他/她的经验。下面是我正在执行的代码,之后我收到错误 SoapException was Unhandled 。

ExchangeServiceBinding serviceBinding = new ExchangeServiceBinding();
    serviceBinding.Credentials = new NetworkCredential("XXXXXXXX", "YYYYYY", "zzzzzzzz");
    serviceBinding.RequestServerVersionValue = new RequestServerVersion();
    serviceBinding.RequestServerVersionValue.Version = ExchangeVersionType.Exchange2010_SP1;
    serviceBinding.Url = @"https://the.domain.of.my.work/EWS/exchange.asmx";

    DistinguishedFolderIdType publicFolderRoot = new DistinguishedFolderIdType();
    publicFolderRoot.Id = DistinguishedFolderIdNameType.publicfoldersroot;
    FindFolder(serviceBinding, publicFolderRoot, @"All Public Folders");

private static FolderIdType FindFolder(ExchangeServiceBinding esb, BaseFolderIdType folderId, string folderName)
        {

            //FindPublicFolderType request = new FindPublicFolderType();
            FindFolderType request = new FindFolderType();
            request.Traversal = FolderQueryTraversalType.Shallow;
            request.FolderShape = new FolderResponseShapeType();
            request.FolderShape.BaseShape = DefaultShapeNamesType.AllProperties;
            request.ParentFolderIds = new BaseFolderIdType[] { folderId };

            //Giving error at this below 
             FindFolderResponseType response = esb.FindFolder(request);

            foreach (ResponseMessageType rmt in response.ResponseMessages.Items)
            {
                if (rmt.ResponseClass == ResponseClassType.Success)
                {
                    FindFolderResponseMessageType ffResponse = (FindFolderResponseMessageType)rmt;

                    if (ffResponse.RootFolder.TotalItemsInView > 0)
                    {
                        foreach (BaseFolderType subFolder in ffResponse.RootFolder.Folders)
                            if (subFolder.DisplayName == folderName)
                                return subFolder.FolderId;
                        return null;
                    }
                    Console.WriteLine("Can't find '" + folderName + "'.");
                }

                else
                {

                    //Console.WriteLine("Response was: " + rmt.ResponseClass + Environment.NewLine + rmt.MessageText);
                    MessageBox.Show("Response was: " + rmt.ResponseClass + Environment.NewLine + rmt.MessageText);

                }

            }

            return null;

        }

执行上述代码后,我遇到下面提到的错误

System.Web.Services.Protocols.SoapException
System.Web.Services.Protocols.SoapException
was unhandled   Message="The mailbox
that was requested doesn't support the
specified RequestServerVersion."  
Source="System.Web.Services"  
Actor=""   Lang="en-US"   Node=""  
Role=""   StackTrace:
       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 RnDExchangePublicFolder.ExchangeWebServices.ExchangeServiceBinding.FindFolder(FindFolderType
FindFolder1) in
E:\Data\VS2008\RnDExchangePublicFolder\RnDExchangePublicFolder\Web
References\ExchangeWebServices\Reference.cs:line
547
       at RnDExchangePublicFolder.Form1.FindFolder(ExchangeServiceBinding
esb, BaseFolderIdType folderId, String
folderName) in
E:\Data\VS2008\RnDExchangePublicFolder\RnDExchangePublicFolder\Form1.cs:line
51
       at RnDExchangePublicFolder.Form1.btnConnect_Click(Object
sender, EventArgs e) in
E:\Data\VS2008\RnDExchangePublicFolder\RnDExchangePublicFolder\Form1.cs:line
39
       at System.Windows.Forms.Control.OnClick(EventArgs
e)
       at System.Windows.Forms.Button.OnClick(EventArgs
e)
       at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs
mevent)
       at System.Windows.Forms.Control.WmMouseUp(Message&
m, MouseButtons button, Int32 clicks)
       at System.Windows.Forms.Control.WndProc(Message&
m)
       at System.Windows.Forms.ButtonBase.WndProc(Message&
m)
       at System.Windows.Forms.Button.WndProc(Message&
m)
       at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message&
m)
       at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message&
m)
       at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr
hWnd, Int32 msg, IntPtr wparam, IntPtr
lparam)
       at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG&
msg)
       at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32
dwComponentID, Int32 reason, Int32
pvLoopData)
       at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32
reason, ApplicationContext context)
       at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32
reason, ApplicationContext context)
       at System.Windows.Forms.Application.Run(Form
mainForm)
       at RnDExchangePublicFolder.Program.Main()
in
E:\Data\VS2008\RnDExchangePublicFolder\RnDExchangePublicFolder\Program.cs:line
18
       at System.AppDomain._nExecuteAssembly(Assembly
assembly, String[] args)
       at System.AppDomain.ExecuteAssembly(String
assemblyFile, Evidence
assemblySecurity, String[] args)
       at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
       at System.Threading.ThreadHelper.ThreadStart_Context(Object
state)
       at System.Threading.ExecutionContext.Run(ExecutionContext
executionContext, ContextCallback
callback, Object state)
       at System.Threading.ThreadHelper.ThreadStart()
InnerException:

有人可以分享他们的经验导致问题或进一步继续吗?

谢谢

I am trying to read a public folder hosted in ExchangeServer 2010 SP1. Well I am able to connect but when I am trying to read the folder I am getting stragne error. Hope somebody will able to share his/her experience. Below is the code what I am executing doing and after that the error SoapException was Unhandled I am getting.

ExchangeServiceBinding serviceBinding = new ExchangeServiceBinding();
    serviceBinding.Credentials = new NetworkCredential("XXXXXXXX", "YYYYYY", "zzzzzzzz");
    serviceBinding.RequestServerVersionValue = new RequestServerVersion();
    serviceBinding.RequestServerVersionValue.Version = ExchangeVersionType.Exchange2010_SP1;
    serviceBinding.Url = @"https://the.domain.of.my.work/EWS/exchange.asmx";

    DistinguishedFolderIdType publicFolderRoot = new DistinguishedFolderIdType();
    publicFolderRoot.Id = DistinguishedFolderIdNameType.publicfoldersroot;
    FindFolder(serviceBinding, publicFolderRoot, @"All Public Folders");

private static FolderIdType FindFolder(ExchangeServiceBinding esb, BaseFolderIdType folderId, string folderName)
        {

            //FindPublicFolderType request = new FindPublicFolderType();
            FindFolderType request = new FindFolderType();
            request.Traversal = FolderQueryTraversalType.Shallow;
            request.FolderShape = new FolderResponseShapeType();
            request.FolderShape.BaseShape = DefaultShapeNamesType.AllProperties;
            request.ParentFolderIds = new BaseFolderIdType[] { folderId };

            //Giving error at this below 
             FindFolderResponseType response = esb.FindFolder(request);

            foreach (ResponseMessageType rmt in response.ResponseMessages.Items)
            {
                if (rmt.ResponseClass == ResponseClassType.Success)
                {
                    FindFolderResponseMessageType ffResponse = (FindFolderResponseMessageType)rmt;

                    if (ffResponse.RootFolder.TotalItemsInView > 0)
                    {
                        foreach (BaseFolderType subFolder in ffResponse.RootFolder.Folders)
                            if (subFolder.DisplayName == folderName)
                                return subFolder.FolderId;
                        return null;
                    }
                    Console.WriteLine("Can't find '" + folderName + "'.");
                }

                else
                {

                    //Console.WriteLine("Response was: " + rmt.ResponseClass + Environment.NewLine + rmt.MessageText);
                    MessageBox.Show("Response was: " + rmt.ResponseClass + Environment.NewLine + rmt.MessageText);

                }

            }

            return null;

        }

After executing the above code I am facing error mentioned below

System.Web.Services.Protocols.SoapException
System.Web.Services.Protocols.SoapException
was unhandled   Message="The mailbox
that was requested doesn't support the
specified RequestServerVersion."  
Source="System.Web.Services"  
Actor=""   Lang="en-US"   Node=""  
Role=""   StackTrace:
       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 RnDExchangePublicFolder.ExchangeWebServices.ExchangeServiceBinding.FindFolder(FindFolderType
FindFolder1) in
E:\Data\VS2008\RnDExchangePublicFolder\RnDExchangePublicFolder\Web
References\ExchangeWebServices\Reference.cs:line
547
       at RnDExchangePublicFolder.Form1.FindFolder(ExchangeServiceBinding
esb, BaseFolderIdType folderId, String
folderName) in
E:\Data\VS2008\RnDExchangePublicFolder\RnDExchangePublicFolder\Form1.cs:line
51
       at RnDExchangePublicFolder.Form1.btnConnect_Click(Object
sender, EventArgs e) in
E:\Data\VS2008\RnDExchangePublicFolder\RnDExchangePublicFolder\Form1.cs:line
39
       at System.Windows.Forms.Control.OnClick(EventArgs
e)
       at System.Windows.Forms.Button.OnClick(EventArgs
e)
       at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs
mevent)
       at System.Windows.Forms.Control.WmMouseUp(Message&
m, MouseButtons button, Int32 clicks)
       at System.Windows.Forms.Control.WndProc(Message&
m)
       at System.Windows.Forms.ButtonBase.WndProc(Message&
m)
       at System.Windows.Forms.Button.WndProc(Message&
m)
       at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message&
m)
       at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message&
m)
       at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr
hWnd, Int32 msg, IntPtr wparam, IntPtr
lparam)
       at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG&
msg)
       at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32
dwComponentID, Int32 reason, Int32
pvLoopData)
       at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32
reason, ApplicationContext context)
       at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32
reason, ApplicationContext context)
       at System.Windows.Forms.Application.Run(Form
mainForm)
       at RnDExchangePublicFolder.Program.Main()
in
E:\Data\VS2008\RnDExchangePublicFolder\RnDExchangePublicFolder\Program.cs:line
18
       at System.AppDomain._nExecuteAssembly(Assembly
assembly, String[] args)
       at System.AppDomain.ExecuteAssembly(String
assemblyFile, Evidence
assemblySecurity, String[] args)
       at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
       at System.Threading.ThreadHelper.ThreadStart_Context(Object
state)
       at System.Threading.ExecutionContext.Run(ExecutionContext
executionContext, ContextCallback
callback, Object state)
       at System.Threading.ThreadHelper.ThreadStart()
InnerException:

Can somebody share their experience what is causing the issue or to further proceed.?

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文