WebService Enhancements 2.0 Learning Note

        近来因为互联星空项目原因用到了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)
        
{
            
// 获取 SoapContext 作为响应消息
            
            SoapContext myContext 
= ResponseSoapContext.Current;//这个地方wse1.0和2.0是不一样的


            
// 创建一个数组,用于返回相关 DIME 附件的 URI。
            int i = 0// 迭代器

            
// 为由 imageID 数组中的值指定的每个文件
            
// 创建一个 DimeAttachment 对象。
            foreach (string fileName in fileNameCollection)
            
{
            
// 字符串,表示附件的文件名和路径。
                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

 public class Service1 : Microsoft.Web.Services2.WebServicesClientProtocol {

9.现在你就可以调用了

            wse.Service1 wseservice = new wse.Service1();
            wseservice.GetFiles( 
new string[] {"Bliss"} );
            
if (wseservice.ResponseSoapContext.Attachments.Count > 0)
            
{
                
for (int i=0; i<wseservice.ResponseSoapContext.Attachments.Count;i++)
                
{
        
//可以使用的附件的流wseservice.ResponseSoapContext.Attachments[i].Stream;

                    
                }

            }
    

 


 

posted on 2005-08-02 17:56  Arthur_wuancheng(大步牛)  阅读(2771)  评论(7编辑  收藏  举报