首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 企业软件 > 行业软件 >

webpart中动态调用webservice出错,该怎么解决

2012-03-07 
webpart中动态调用webservice出错动态调用webservice的方法如下,参考自http://www.cnblogs.com/uleewang/a

webpart中动态调用webservice出错
动态调用webservice的方法如下,参考自http://www.cnblogs.com/uleewang/archive/2009/05/13/1455699.html

C# code
        public static string[] GetWeatherbyCityName(string cityName)        {            String[] item = null;            SPSecurity.RunWithElevatedPrivileges(delegate()            {                WebClient client = new WebClient();                client.Proxy = new WebProxy("10.0.15.29", 8080);                client.Proxy.Credentials = System.Net.CredentialCache.DefaultCredentials;                String url = "http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl";//这个地址可以写在Config文件里面,这里取出来就行了.在原地址后面加上: ?WSDL                Stream stream = client.OpenRead(url);                ServiceDescription description = ServiceDescription.Read(stream);                ServiceDescriptionImporter importer = new ServiceDescriptionImporter();//创建客户端代理代理类。                importer.ProtocolName = "Soap"; //指定访问协议。                importer.Style = ServiceDescriptionImportStyle.Client; //生成客户端代理。                importer.CodeGenerationOptions = CodeGenerationOptions.GenerateProperties | CodeGenerationOptions.GenerateNewAsync;                importer.AddServiceDescription(description, null, null); //添加WSDL文档。                CodeNamespace nmspace = new CodeNamespace(); //命名空间                nmspace.Name = "TestWebService";                CodeCompileUnit unit = new CodeCompileUnit();                unit.Namespaces.Add(nmspace);                ServiceDescriptionImportWarnings warning = importer.Import(nmspace, unit);                CodeDomProvider provider = CodeDomProvider.CreateProvider("CSharp");                CompilerParameters parameter = new CompilerParameters();                parameter.GenerateExecutable = false;                parameter.OutputAssembly = @"C:\Inetpub\wwwroot\wss\VirtualDirectories\80\bin\MyTest.dll";//输出程序集的名称                parameter.ReferencedAssemblies.Add("System.dll");                parameter.ReferencedAssemblies.Add("System.XML.dll");                parameter.ReferencedAssemblies.Add("System.Web.Services.dll");                parameter.ReferencedAssemblies.Add("System.Data.dll");                CompilerResults result = provider.CompileAssemblyFromDom(parameter, unit);                if (result.Errors.HasErrors)                {                    // 显示编译错误信息                }                Assembly asm = Assembly.LoadFrom(@"C:\Inetpub\wwwroot\wss\VirtualDirectories\80\bin\MyTest.dll");//加载前面生成的程序集                Type t = asm.GetType("TestWebService.WeatherWebService");                object o = Activator.CreateInstance(t);                MethodInfo method = t.GetMethod("getWeatherbyCityName");//GetPersons是服务端的方法名称,你想调用服务端的什么方法都可以在这里改,最好封装一下                ////上面是根据WebService地址,模似生成一个代理类,如果你想看看生成的代码文件是什么样子,可以用以下代码保存下来,默认是保存在bin目录下面                //TextWriter writer = File.CreateText("MyTest.cs");                //provider.GenerateCodeFromCompileUnit(unit, writer, null);                //writer.Flush();                //writer.Close();                string[] parameters = new string[] { cityName };//这个就是构造参数的                item = (String[])method.Invoke(o, parameters);                //注:method.Invoke(o, null)返回的是一个Object,如果你服务端返回的是DataSet,这里也是用(DataSet)method.Invoke(o, null)转一下就行了            });            return item;        }


UserControl中用该方法获取数据
C# code
     protected void Page_Load(object sender, EventArgs e)        {            if (!IsPostBack)            {               string[] _weatherArray = WeatherHelp.GetWeatherbyCityName("上海");            }        }


UserControl在Asp.net网站中运行正常
但是通过QuickPart添加到sharepoint网站中后,webservice访问被拒绝

大家帮忙看看,怎么回事。谢谢!

[解决办法]
webservice访问被拒绝,有没有堆栈信息啊?你的dll在webconfig中注册了么?
[解决办法]

探讨
webservice访问被拒绝,有没有堆栈信息啊?你的dll在webconfig中注册了么?

热点排行