excel调用webservice

一、安装开发包。
      要从Excel中通过宏调用Web Service,需要安装Microsoft Office 2003 Web Services Toolkit 2.01,可从这里下载,下载
二、调用Web Service
      安装好开发包以后,调用Web Service就变得很容易了,操作跟在VS 2003中差不多。切换到宏编辑器(Visual Basic Editor),从Tools菜单中点击“Web Service Reference”打开添加Web service引用的对话框。添加好引用后,开发包就会自动为你封装好一些用Soap调用Web Service的相关类。调用这些类中的相关方法就可以调用Web Service方法了。
三、读写SoapHeader内容
有些Web Service需要提供SoapHeader内容,比如通过SoapHeader提供帐号信息以供服务端验证客户身份。下面就是一个例子
服务端:
自定义SoapHeader类:
     public   class  ServiceHead : System.Web.Services.Protocols.SoapHeader
    
{
        
private string userName;
        
private string password;

        
public string UserName
        
{
            
get return userName; }
            
set { userName = value; }
        }

        
public string Password
        
{
            
get return password; }
            
set { password = value; }
        }

    }

Web Service方法:
[WebMethod(Description  =   " User name and password are reuired! " )]
[SoapHeader(
" accountHead " )]
public  MonthPriceCol GetPriceInfo( string  pSymbol, string  pBeginDate, string  pEndDate)
{
   .
   
if(!CheckUserIdentity(accountHead)) return null;
   .
}

客户端:
定义一个专门的类用于封装对SoapHeader的操作,类名为clsAccountHeader:

Option   Explicit
Implements  IHeaderHandler

Private   Const   NameSpace As String = "http://tempuri.org/"
Private myUserName As String
Private myPassword As String

Public Property Let UserName(ByVal name As String)
    myUserName 
= name
End Property


Public Property Get UserName() As String
    UserName 
= myUserName
End Property


Public Property Let Password(ByVal password1 As String)
    myPassword 
= password1
End Property


Public Property Get Password() As String
    Password 
= myPassword
End Property



Private Function IHeaderHandler_ReadHeader( _
    
ByVal pReader As SoapReader30, _
    
ByVal pHeaderNode As MSXML2.IXMLDOMNode, _
    
ByVal pObject As Object) _
    
As Boolean
    
    IHeaderHandler_ReadHeader 
= False
End Function


Private Function IHeaderHandler_WillWriteHeaders() As Boolean
    IHeaderHandler_WillWriteHeaders 
= True
End Function



'<ServiceHead xmlns="http://tempuri.org/">
'
      <UserName>string</UserName>
'
      <Password>string</Password>
'
</ServiceHead>
Private Sub IHeaderHandler_WriteHeaders(ByVal pSerializer As SoapSerializer30, ByVal pObject As Object)
    
    
'Dim doc As New MSXML2.DOMDocument40
    
    
'Create the string for UserInfoRouteHeader.
    Dim userDoc As String
    userDoc 
= "<ServiceHead xmlns=""" & NameSpace & """>"
    
    
If myUserName <> "" Then
        userDoc 
= userDoc & "<UserName>" & myUserName & "</UserName>"
    
End If
    
    
If myPassword <> "" Then
        userDoc 
= userDoc & "<Password>" & myPassword & "</Password>"
    
End If
    
    userDoc 
= userDoc & "</ServiceHead>"
    
    pSerializer.WriteXml userDoc
End Sub


在调用Web Service方法时提供SoapHeader内容:
Private   Sub Class_Initialize()
    
'*****************************************************************
    'This subroutine will be called each time the class is instantiated.
    'Creates sc_ComplexTypes as new SoapClient30, and then
    'initializes sc_ComplexTypes.mssoapinit2 with WSDL file found in
    'http://172.20.18.191/StockService/StockService.asmx?wsdl.
    '*****************************************************************

    
Dim myAccount As New clsAccountHeader
    
Dim str_WSML As String
    str_WSML 
= "<servicemapping>"
    str_WSML 
= str_WSML & "<service name='StockService'>"
    str_WSML 
= str_WSML & "<using PROGID='MSOSOAP.GenericCustomTypeMapper30' cachable='0' ID='GCTM'/>"
    str_WSML 
= str_WSML & "<types>"
    str_WSML 
= str_WSML & "<type name='StockMonthPrice' targetNamespace='http://tempuri.org/' uses='GCTM' targetClassName='struct_StockMonthPrice'/>"
    str_WSML 
= str_WSML & "</types>"
    str_WSML 
= str_WSML & "</service>"
    str_WSML 
= str_WSML & "</servicemapping>"

    
Set sc_StockService = New SoapClient30

    sc_StockService.MSSoapInit2 c_WSDL_URL, str_WSML, c_SERVICE, c_PORT, c_SERVICE_NAMESPACE
    
'Use the proxy server defined in Internet Explorer's LAN settings by
    'setting ProxyServer to <CURRENT_USER>
    sc_StockService.ConnectorProperty("ProxyServer"= "<CURRENT_USER>"
    
'Autodetect proxy settings if Internet Explorer is set to autodetect
    'by setting EnableAutoProxy to True
    sc_StockService.ConnectorProperty("EnableAutoProxy"= True

    
Set sheet = ActiveWorkbook.Sheets("Tickers")
    myAccount.UserName 
= sheet.txtEmail.Value
    myAccount.Password 
= sheet.txtPassword.Value
    
Set sc_StockService.HeaderHandler = myAccount
    
    
Set sc_StockService.ClientProperty("GCTMObjectFactory"= New clsof_Factory_StockService

End Sub

关于读SoapHeader的实现可参考婷篇文章:利用 SOAP 头保持 EJB 状态(http://www.ibm.com/developerworks/cn/webservices/ws-ejbsoap/index.html
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
调用WebService服务的方法有多种。一种方法是利用命令或工具将WebService提供的wsdl文件生成对应的java类,这样就可以像调用本地类一样调用WebService提供的接口。这种方法的优点是调用简单,无需自己编写太多的东西,但缺点是生成的代码过于庞大,不便于阅读。 另一种方法是使用不同的Java框架来调用WebService服务。例如,可以使用XFire框架进行调用。可以通过导入相关的包和编写相应的代码来调用WebService服务。以下是使用XFire框架调用WebService的示例代码: ``` import org.codehaus.xfire.client.Client; import java.net.URL; public class WebServiceTest { public static void main(String[] args) { try { // 服务地址 String url = "http://127.0.0.1:8080/service-test/services/gateway?wsdl"; // 方法名 String method = "invoke"; Client client = new Client(new URL(url)); Object[] result = client.invoke(method, new Object[]{"test", "queryOrder", "{\"tradeno\":\"1648100061003\",\"mchid\":\"10001\"}"}); System.out.println("服务调用结果:" + result<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [调用webservice服务方式总结](https://blog.csdn.net/liuyunyihao/article/details/125083983)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值