joozh 发表于 2015-9-28 08:37:20

SharePoint(WSS)学习(7) WSS中使用Web Service

由于需要在WSS中使用Web Service,经过摸索,终于找到比较合适的方法来开发部署Web Service。
1.建立Asmx新建SharePoint Empty项目,添加Module,添加ASMX文件,编写ASMX后台代码。
如:TestAsmx.asmx

<%@ WebService Language="C#" Class="WebPartWithAscx.TestAsmx,SampleAsmx, Version=1.0.0.0, Culture=neutral, PublicKeyToken=9f4da00116c38ec5" %>
TestAsmx.asmx.cs:

using System.Web.Services;
namespace WebPartWithAscx
{
   
   
   
    public class TestAsmx : System.Web.Services.WebService
    {
      
      public string HelloWorld()
      {
            return "Hello World";
      }
    }
}
然后修改设置Module.xml,关键是设置URL:

<?xml version="1.0" encoding="utf-8"?>
<Elements Id="a7d06f55-3330-46cb-9c87-8c9481fc0047" xmlns="http://schemas.microsoft.com/sharepoint/">
<Module Name="SampleAsmx" Url="UserWebServices">
    <File Path="TestAsmx.asmx" Url="TestAsmx.asmx" />
</Module>
</Elements>
编译部署,发现部署失败,信息为:The file you are attempting to save or retrieve has been blocked from this Web site by the server administrators.
原因是asmx文件类型被禁止。
打开Central Administration -> Operations -> Blocked file types,把列表中的asmx文件类型删掉,保存。可正常部署运行asmx,用wsdl命令行生成该asmx的代理类。加到该Module中(注意:WebService定义和代理类通常情况下是分离的,在这里为演示,将他们放到一起;WebService 代理类的URL应该能够配置,可写在Web.config中,本文从略。),注意设置命名空间,不要与asmx定义冲突,编译部署。
2.测试Asmx。
在解决方案中添加WebPart项目。
编写调用WebService的代码,部署运行WebPart,发现出现错误:wss The request failed with HTTP status 401: Unauthorized.
原因是没有权限访问该WebService,为WebService添加当前的Credentials:
asmx.Credentials = System.Net.CredentialCache.DefaultCredentials;
再次部署能够正确运行,TestSampleAsmx.cs最终代码为:

using System;
using System.Runtime.InteropServices;
using System.Web.UI.WebControls;

namespace TestSampleAsmx
{
   
    public class TestSampleAsmx : System.Web.UI.WebControls.WebParts.WebPart
    {
      Label lbl = null;
      Button btn = null;
      public TestSampleAsmx()
      {
      }
      protected override void CreateChildControls()
      {
            btn = new Button();
            btn.Text = "Call Web Service";
            btn.Click += new EventHandler(btn_Click);
            lbl = new Label();
            this.Controls.Add(btn);
            this.Controls.Add(lbl);
      }
      void btn_Click(object sender, EventArgs e)
      {
            try
            {
                Xianfen.Net.Asmx.TestAsmx asmx = new Xianfen.Net.Asmx.TestAsmx();
                asmx.Credentials = System.Net.CredentialCache.DefaultCredentials;
                lbl.Text = asmx.HelloWorld();
            }
            catch (Exception ex)
            {
                lbl.Text = ex.Message;
            }
      }
    }
}
最终项目视图为:

http://www.xianfen.net/Upload/img_big/2008120122223864.jpghttp://www.xianfen.net/Upload/img_big/2008120122230031.jpg

添加WebPart,运行后如图:
http://www.xianfen.net/Upload/img_big/2008120122232430.jpg
示例下载:点击下载
飘遥的Blog:http://www.cnblogs.com/zxjay/
作者:飘遥(周振兴)
页: [1]
查看完整版本: SharePoint(WSS)学习(7) WSS中使用Web Service