|
由于需要在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/
作者:飘遥(周振兴) |
|