近来因为互联星空项目原因用到了WebService, 又因为需求原因,需要对webservice 加密,而找到了wse.
拿到手就纵观了一下,真是个好东西阿,现在微软已经出到了wse 2.0 sp3, 下载地址如下
http://www.microsoft.com/downloads/details.aspx?familyid=1ba1f631-c3e7-420a-bc1e-ef18bab66122&displaylang=en
wse3.0 ctp 也出来了感兴趣的朋友可以看看
http://www.microsoft.com/downloads/details.aspx?familyid=7591DFD2-E1B7-4624-9D5B-29C211D149FE&displaylang=en
今天我先说说用webservice传文件了,呵呵,在下才疏学浅,肯定有些谬误之处,还望大家不吝指出。
1.首先确定安装完毕你的wse
2.新建一个webservice
3.添加Microsoft.Web.Services2引用
4.代码里面加上
using Microsoft.Web.Services2;
using Microsoft.Web.Services2.Dime;
5.请在web.config加入
<webServices>
<soapExtensionTypes>
<add type="Microsoft.Web.Services2.WebServicesExtension, Microsoft.Web.Services2,Version=2.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35" priority="1" group="0" />
</soapExtensionTypes>
</webServices>
6. 现在可以写具体功能的实现了
[WebMethod]
public void GetFiles(string[] fileNameCollection)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
// 获取 SoapContext 作为响应消息
SoapContext myContext = ResponseSoapContext.Current;//这个地方wse1.0和2.0是不一样的
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
// 创建一个数组,用于返回相关 DIME 附件的 URI。
int i = 0; // 迭代器
![](/Images/OutliningIndicators/InBlock.gif)
// 为由 imageID 数组中的值指定的每个文件
// 创建一个 DimeAttachment 对象。
foreach (string fileName in fileNameCollection)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
// 字符串,表示附件的文件名和路径。
string filePath = "C:\\images\\" + fileName + ".jpg";
// 使用文件名来创建新的 DIME 附件,
// 并通过 MIME 媒体类型 image\jpeg
// 来指定附件编码。
DimeAttachment dimeFile = new DimeAttachment(
"image/jpeg", TypeFormat.MediaType,
filePath);
myContext.Attachments.Add( dimeFile );
}
}
附件的传递其实是通过附加在SoapContext myContext上
myContext.Attachments.Add( dimeFile );这句就是附件的附加,放在ReponseSoap的上下文中
7.调用此webservice. 调用的时候和一般webservice还是有些区别的
首先要在客户端的webservice中引用Microsoft.Web.Services2,和服务器一样改web.config,这些步骤都一样
8.重要,你的找到生成的代理类,并在其中继承Microsoft.Web.Services2.WebServicesClientProtocol而不是System.Web.Services.Protocols.SoapHttpClientProtocol
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
public class Service1 : Microsoft.Web.Services2.WebServicesClientProtocol
{
9.现在你就可以调用了
wse.Service1 wseservice = new wse.Service1();
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
wseservice.GetFiles( new string[]
{"Bliss"} );
if (wseservice.ResponseSoapContext.Attachments.Count > 0)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
for (int i=0; i<wseservice.ResponseSoapContext.Attachments.Count;i++)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
//可以使用的附件的流wseservice.ResponseSoapContext.Attachments[i].Stream;
![](/Images/OutliningIndicators/InBlock.gif)
}
}