飘遥的Blog

C/C++/.NET
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

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

Posted on 2008-12-01 22:39  Zzx飘遥  阅读(972)  评论(1编辑  收藏  举报
由于需要在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
{
    [WebService(Namespace
= "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo
= WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(
false)]
    
public class TestAsmx : System.Web.Services.WebService
    {

        [WebMethod]
        
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
{
    [Guid(
"a9a79045-ee68-45de-ab33-174fa175f9c9")]
    
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;
            }
        }
    }
}

最终项目视图为:
 

添加WebPart,运行后如图:


示例下载:点击下载

飘遥的Blog:http://www.cnblogs.com/zxjay/
作者:飘遥(周振兴)