所有这些客户都位于我们的CRM,NetSuite中,我们希望我们的客户服务团队更新客户信息并将其分配给FBA角色(角色已添加到SharePoint中的组).
为此,我希望创建SOAP XML文件,NetSuite自己的开发语言SuiteScript可以使用它,它将发送SOAP请求,响应过程也可以使用.
例如:使用soapUI我正在构建以下XML:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:dir="http://schemas.microsoft.com/sharepoint/soap/directory/"> <soapenv:Header/> <soapenv:Body> <dir:GetUserInfo> <dir:userLoginName>myUserName</dir:userLoginName> </dir:GetUserInfo> </soapenv:Body> </soapenv:Envelope>
问题是,当使用soapUI执行此XML时,我的XML响应是403 FORBIDDEN – Raw响应是:
HTTP/1.1 403 Forbidden Cache-Control: private,max-age=0 Server: Microsoft-IIS/7.5 SPRequestGuid: 36264ce4-9702-44bb-9693-23852a5e0c99 X-SharePointHealthscore: 1 X-Forms_Based_Auth_required: http://mySPserver/_layouts/login.aspxReturnUrl=/_layouts/Error.aspx&Source=%2f_vti_bin%2fusergroup.asmx X-Forms_Based_Auth_Return_Url: http://ec2-devmoss1/_layouts/Error.aspx X-MSDAVEXT_Error: 917656; Access denied. Before opening files in this location,you must first browse to the web site and select the option to login automatically. X-AspNet-Version: 2.0.50727 X-Powered-By: ASP.NET MicrosoftSharePointTeamServices: 14.0.0.4762 Date: Tue,19 Jul 2011 19:25:47 GMT Content-Length: 13 403 FORBIDDEN
我猜我需要以某种方式使用XML中的凭据登录,但我该怎么做?我尝试在我的< soapenv:Header>中使用它…
<soapenv:Header> <h:BasicAuth xmlns:h="http://soap-authentication.org/basic/2001/10/" SOAP-ENV:mustUnderstand="1"> <Name>user</Name> <Password>password</Password> </h:BasicAuth> </soapenv:Header>
但随后我的Raw响应成为:
HTTP/1.1 400 Bad Request Cache-Control: private Server: Microsoft-IIS/7.5 X-AspNet-Version: 2.0.50727 X-Powered-By: ASP.NET MicrosoftSharePointTeamServices: 14.0.0.4762 Date: Tue,19 Jul 2011 19:43:12 GMT Content-Length: 0
任何人都可以建议如何正确地为这个或任何SharePoint Web服务方法形成XML SOAP调用,或者指向一个解释它的文章/问题(带答案)?我尝试使用谷歌搜索和浏览stackoverflow(当然),但我找不到我需要的信息/解决方案.
(抱歉这个很长的问题)
凯文
解决方法
使用FBA访问SharePoint网站上的Web服务需要一些额外的工作.
在.Net中,它非常简单.实际上,有一篇包含代码示例的MSDN文章,所有文章都精确地指明了这一点.总之,您首先在Authentication.asmx上调用Login方法,并在将来的所有Web服务请求中使用返回的cookie.
外面.Net
一个黑暗和暴风雨的夜晚,我冒险进入非微软世界.无人区.如果没有.Net生成的Web服务代理,我们就会使用自己的SOAP消息与SharePoint Web服务进行通信.
我的饼干在哪里?
如果没有.Net代理,则不能像MSDN文章所建议的那样使用CookieContainer. Authentication.asmx对Login的描述显示以下SOAP响应:
响应XML只包含身份验证cookie的名称.实际的cookie在哪里? GIMME我的COOKIE !!!
获取cookie
事实证明,cookie是在SOAP标头中发送的.如果登录成功,响应的SOAP标头将如下所示:
上面的Set-Cookie字段为我们提供了名为.ASPXAUTH的FBA cookie,值为987A98 …….
使用cookie
要将cookie用于Web服务请求,我们需要通过添加Cookie字段将其包含在SOAP请求标头中:
您可以通过使用分号分隔名称/值对来包含多个Cookie.设置.ASPXAUTH cookie后,您可以发送请求,并且应该正常返回响应.
在ISA线后面没有人的土地
可以类似地处理具有Forms身份验证的ISA服务器后面的SharePoint站点.不同之处在于我们必须从ISA服务器而不是SharePoint获取身份验证cookie.这可以通过POST到/CookieAuth.dll?logon网址来完成.我不会详细介绍,但要弄清楚使用的网址和查询字符串应该不难.