如何从Web部件调用spsearch.asmx服务?我得到错误了吗? [英] How call spsearch.asmx service from web part? I get error ?
本文介绍了如何从Web部件调用spsearch.asmx服务?我得到错误了吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
好吧同性恋者,我有个大问题,需要从Web部件调用Web服务,但我有STUPID异常.我使用WSS 3.0和Search Server Express2008.
接下来我做了
- 创建的Web部件项目
- 添加了对项目的Web服务引用(http://machinname/_vti_bin/spsearch.asmx)
- 添加了下一个代码
受保护的重写void CreateChildControls() { base.CreateChildControls(); QueryServiceSoapClient qssc =新的QueryServiceSoapClient(); //qssc.ClientCredentials.Windows.ClientCredential = System.Net.CredentialCache.DefaultNetworkCredentials; //新的System.ServiceModel.Description.ClientCredentials();//System.Net.NetworkCredential("Administrator","opanak","medicurious3"); //qssc.ClientCredentials.Windows.AllowNtlm = false; qssc.ClientCredentials.Windows.ClientCredential =新的System.Net.NetworkCredential(管理员","opanak","medicurious3"); StringBuilder queryXml = new StringBuilder(); queryXml.Append(< QueryPacket xmlns = \""urn:Microsoft.Search.Query \" Revision = \"1000 \"); queryXml.Append(<查询域= \" QDomain \">)); queryXml.Append(< SupportedFormats>")); queryXml.Append(< Format>")); queryXml.Append("urn:Microsoft.Search.Response.Document.Document")); queryXml.Append(</Format>")); queryXml.Append(</SupportedFormats>")); queryXml.Append(< Range>"); queryXml.Append(< Count> 50</Count>")); queryXml.Append(</Range>"); queryXml.Append(< Context>"); queryXml.Append(< QueryText language = \" en-US \"type = \" STRING \")); queryXml.Append("Maria"); queryXml.Append(</QueryText>");; queryXml.Append(</Context>")); queryXml.Append(</Query>")); queryXml.Append(</QueryPacket>"); //TODO:在此处添加自定义渲染代码. 标签label = new Label(); 尝试 { label.Text =" qssc.Query(queryXml.ToString())" + qssc.Query(queryXml.ToString()); } 抓住(前例外) { label.Text = ex.ToString(); } this.Controls.Add(label); }
- 编译并部署Webpart到共享点,并添加到起始网页
- 然后我得到下一个异常:
System.ServiceModel.Security.MessageSecurityException:
The HTTP request is unauthorized with client authentication scheme 'Anonymous'.
The authentication header received from the server was 'Negotiate,NTLM'. ---> System.Net.WebException:
The remote server returned an error: (401) Unauthorized. at System.Net.HttpWebRequest.GetResponse() at
System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout) --- End of inner exception stack trace
--- Server stack trace: at System.ServiceModel.Channels.HttpChannelUtilities.ValidateAuthentication(HttpWebRequest request, HttpWebResponse response,
WebException responseException, HttpChannelFactory factory) at System.ServiceModel.Channels.HttpChannelUtilities.ValidateRequestReplyResponse(HttpWebRequest request, HttpWebResponse response,
HttpChannelFactory factory, WebException responseException) at System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout)
at System.ServiceModel.Channels.RequestChannel.Request(Message message, TimeSpan timeout) at System.ServiceModel.Dispatcher.RequestChannelBinder.Request(Message message, TimeSpan timeout)
at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs)
at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation) at
System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message) Exception rethrown at [0]: at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg,
IMessage retMsg) at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type) at SearchServicesNameSpace.ServiceReference1.QueryServiceSoap.Query(QueryRequest request)
at SearchServicesNameSpace.ServiceReference1.QueryServiceSoapClient.SearchServicesNameSpace.ServiceReference1.QueryServiceSoap.Query(QueryRequest request)
at SearchServicesNameSpace.ServiceReference1.QueryServiceSoapClient.Query(String queryXml) at SearchServices.SearchServiceQueryService.CreateChildControls() - 我使用启用肛门访问"
- 我也复制到共享点的web.config
<system.serviceModel> <bindings> <basicHttpBinding> <binding name="QueryServiceSoap" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536" messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true"> <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384" /> <security mode="None"> <transport clientCredentialType="None" proxyCredentialType="None" realm="" /> <message clientCredentialType="UserName" algorithmSuite="Default" /> </security> </binding> </basicHttpBinding> </bindings> <client> <endpoint address="http://medicurious3/_vti_bin/spsearch.asmx" binding="basicHttpBinding" bindingConfiguration="QueryServiceSoap" contract="ServiceReference1.QueryServiceSoap" name="QueryServiceSoap" /> </client> </system.serviceModel>
smoebody可以帮助我吗?
解决方案
>
感谢您的信息!我建议将您的问题发布到MS论坛之一中,
首页 › ASP.NET论坛 » 数据访问 » XML Web服务
Ok gays, I have large problem, need call web service from web part but I have STUPID exception. I use WSS 3.0 and Search server Express 2008.
I did next
- Created web part project
- Added web service reference to project (http://machinname/_vti_bin/spsearch.asmx)
- Added next code
protected override void CreateChildControls() { base.CreateChildControls(); QueryServiceSoapClient qssc = new QueryServiceSoapClient(); //qssc.ClientCredentials.Windows.ClientCredential = System.Net.CredentialCache.DefaultNetworkCredentials; //new System.ServiceModel.Description.ClientCredentials();// System.Net.NetworkCredential("Administrator", "opanak", "medicurious3"); //qssc.ClientCredentials.Windows.AllowNtlm = false; qssc.ClientCredentials.Windows.ClientCredential = new System.Net.NetworkCredential("Administrator", "opanak", "medicurious3"); StringBuilder queryXml = new StringBuilder(); queryXml.Append("<QueryPacket xmlns=\"urn:Microsoft.Search.Query\" Revision=\"1000\">"); queryXml.Append("<Query domain=\"QDomain\">"); queryXml.Append("<SupportedFormats>"); queryXml.Append("<Format>"); queryXml.Append("urn:Microsoft.Search.Response.Document.Document"); queryXml.Append("</Format>"); queryXml.Append("</SupportedFormats>"); queryXml.Append("<Range>"); queryXml.Append("<Count>50</Count>"); queryXml.Append("</Range>"); queryXml.Append("<Context>"); queryXml.Append("<QueryText language=\"en-US\" type=\"STRING\">"); queryXml.Append("Maria"); queryXml.Append("</QueryText>"); queryXml.Append("</Context>"); queryXml.Append("</Query>"); queryXml.Append("</QueryPacket>"); // TODO: add custom rendering code here. Label label = new Label(); try { label.Text = "qssc.Query(queryXml.ToString()) " + qssc.Query(queryXml.ToString()); } catch (Exception ex) { label.Text = ex.ToString(); } this.Controls.Add(label); }
- Compiled and deploy webpart to sharepoint and added to start web page
- Then I get next exception :
System.ServiceModel.Security.MessageSecurityException:
The HTTP request is unauthorized with client authentication scheme 'Anonymous'.
The authentication header received from the server was 'Negotiate,NTLM'. ---> System.Net.WebException:
The remote server returned an error: (401) Unauthorized. at System.Net.HttpWebRequest.GetResponse() at
System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout) --- End of inner exception stack trace
--- Server stack trace: at System.ServiceModel.Channels.HttpChannelUtilities.ValidateAuthentication(HttpWebRequest request, HttpWebResponse response,
WebException responseException, HttpChannelFactory factory) at System.ServiceModel.Channels.HttpChannelUtilities.ValidateRequestReplyResponse(HttpWebRequest request, HttpWebResponse response,
HttpChannelFactory factory, WebException responseException) at System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout)
at System.ServiceModel.Channels.RequestChannel.Request(Message message, TimeSpan timeout) at System.ServiceModel.Dispatcher.RequestChannelBinder.Request(Message message, TimeSpan timeout)
at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs)
at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation) at
System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message) Exception rethrown at [0]: at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg,
IMessage retMsg) at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type) at SearchServicesNameSpace.ServiceReference1.QueryServiceSoap.Query(QueryRequest request)
at SearchServicesNameSpace.ServiceReference1.QueryServiceSoapClient.SearchServicesNameSpace.ServiceReference1.QueryServiceSoap.Query(QueryRequest request)
at SearchServicesNameSpace.ServiceReference1.QueryServiceSoapClient.Query(String queryXml) at SearchServices.SearchServiceQueryService.CreateChildControls()
- I use "Enable anonimus access"
- Also I copied to web.config of sharepoint
<system.serviceModel> <bindings> <basicHttpBinding> <binding name="QueryServiceSoap" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536" messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true"> <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384" /> <security mode="None"> <transport clientCredentialType="None" proxyCredentialType="None" realm="" /> <message clientCredentialType="UserName" algorithmSuite="Default" /> </security> </binding> </basicHttpBinding> </bindings> <client> <endpoint address="http://medicurious3/_vti_bin/spsearch.asmx" binding="basicHttpBinding" bindingConfiguration="QueryServiceSoap" contract="ServiceReference1.QueryServiceSoap" name="QueryServiceSoap" /> </client> </system.serviceModel>
Can smoebody help me?
解决方案Hi,
Thank you for your post! I would suggest posting your question in one of the MS Forum,
Home › ASP.NET Forums » Data Access » XML Web Services
这篇关于如何从Web部件调用spsearch.asmx服务?我得到错误了吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取
|
15天全站免登陆