如何从Web部件调用spsearch.asmx服务?我得到错误了吗? [英] How call spsearch.asmx service from web part? I get error ?

查看:52
本文介绍了如何从Web部件调用spsearch.asmx服务?我得到错误了吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

好吧同性恋者,我有个大问题,需要从Web部件调用Web服务,但我有STUPID异常.我使用WSS 3.0和Search Server Express2008.

接下来我做了

  1. 创建的Web部件项目
  2. 添加了对项目的Web服务引用(http://machinname/_vti_bin/spsearch.asmx)
  3. 添加了下一个代码

    受保护的重写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);
            } 

  4. 编译并部署Webpart到共享点,并添加到起始网页
  5. 然后我得到下一个异常:

    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()

  6. 我使用启用肛门访问"
  7. 我也复制到共享点的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论坛之一中,


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

  1. Created web part project
  2. Added web service reference to project (http://machinname/_vti_bin/spsearch.asmx)
  3. 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);
            }

  4. Compiled and deploy webpart to sharepoint and added to start web page
  5. 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()

  6. I use "Enable anonimus access" 
  7. 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,


这篇关于如何从Web部件调用spsearch.asmx服务?我得到错误了吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆