wcf - 使用 GetObject() 方法从 Excel VBA 调用 WCF Web 服务

标签 wcf web-services excel vba

Possible Duplicate:
How do I call WCF client from Excel 2003 VBA?

我想使用 VBA 代码从 Excel 调用使用 WCF 开发的 Web 服务。我们应该怎么做 ?我已经尝试过GetObject()方法,但我在使用此方法时遇到语法错误。我想在 Excel 中显示从 Web 服务获取的数据。请帮忙。 数据合约如下: `

[DataContract] 
public class Data
{
    [DataMember]
    public int Id;
    [DataMember]
    public DateTime LockTime;
    [DataMember]
    public DateTime LoginTime;
    [DataMember]
    public DateTime LastDefenitionDate;
    [DataMember]
    public string NTLogin;
    [DataMember]
    public string SystemName;
}

服务合约如下:

`

[ServiceContract]

interface IDataService
{
    [OperationContract]
    List<Data> GetData();
    [OperationContract]
    void SubmitData(Data data);
}

`

访问数据库的DataService如下:

`

[ServiceBehavior(InstanceContextMode=InstanceContextMode.Single)]

公共(public)类DataService:IDataService { 公共(public)静态 SQLConnection SQLDBConnection = new SQLConnection();

    #region IDataService Members

    public List<Data> GetData()
    {
        List<Data> datas = new List<Data>();
        try
        {
            if (SQLDBConnection.con.State == ConnectionState.Closed) SQLDBConnection.con.Open();
            datas.Clear();
            SqlCommand sqlcommand = new SqlCommand();
            sqlcommand.Connection = SQLDBConnection.con;
            sqlcommand.CommandText = "select * from tblData";
            sqlcommand.CommandType = CommandType.Text;
            SqlDataAdapter sqladapter = new SqlDataAdapter(sqlcommand);
            DataTable dt = new DataTable();
            sqladapter.Fill(dt);

            Data data = null;
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                data = new Data();
                data.Id = Convert.ToInt32(dt.Rows[i]["id"]);
                data.NTLogin = dt.Rows[i]["NTLogin"].ToString();
                data.SystemName = dt.Rows[i]["SystemName"].ToString();
                data.LockTime = Convert.ToDateTime(dt.Rows[i]["LockTime"]);
                data.LoginTime = Convert.ToDateTime(dt.Rows[i]["LoginTime"]);
                data.LastDefenitionDate = Convert.ToDateTime(dt.Rows[i]["LastDefenitionDate"]);
                datas.Add(data);
            }
        }
        catch (Exception ex)
        {  } 
        return datas;
    }

    public void SubmitData(Data data)
    {
        if (SQLDBConnection.con.State == ConnectionState.Closed) SQLDBConnection.con.Open();
        SqlCommand sqlcommand = new SqlCommand();
        sqlcommand.Connection = SQLDBConnection.con;
        sqlcommand.CommandText = "Insert into dbo.tblData(NTLogin, SystemName, LockTime, LoginTime, LastDefenitionDate) values ('" + data.NTLogin + "','" + data.SystemName + "','" + data.LockTime + "' , '" + data.LoginTime + "', '" + data.LastDefenitionDate + "')";
        sqlcommand.CommandType = CommandType.Text;
        int RowsAffected = sqlcommand.ExecuteNonQuery();
    }

    #endregion
}

`

编辑:

可能重复建议的答案对我来说不起作用。我的整个代码都在这里给出。在发布我的问题之前,我什至检查了该帖子。请检查我的代码。

最佳答案

阅读以下文章,它详细介绍了如何使用 GetObject 从 VBA 代码调用 WCF 服务:

使用 WCF 服务名字对象从 Excel VBA 客户端调用 WCF 服务
http://damianblog.com/2009/07/05/excel-wcf/

但它仅适用于简单的 WCF 服务合约。对于更复杂的事情,您需要使用 VSTO

UPD:在这种情况下,在将 Moniker 与 MEX 合约一起使用时,您应该仅使用原始类型和原始类型数组。当您需要使用复杂类型时,例如尝试将它们打包成字符串或使用更高级的技术,例如带有 COM 客户端的 WCF Moniker ( http://msdn.microsoft.com/en-us/library/ms752245.aspx ) 或 VSTO。

关于wcf - 使用 GetObject() 方法从 Excel VBA 调用 WCF Web 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12745115/

相关文章:

excel - 从 SAP 获取特定单元格数据到 excel

.net - Vb.Net Excel自动化行选择事件

c# - WCF Duplex 客户端的最佳实践

c# - NetTcpBinding() 与 TransferMode.Streamed

java - 如何使用 Maven 构建 WSDL

java - Web 服务响应是 MessageElement?

c# - 没有 ASP.NET AJAX 的 JQuery/WCF :

c# - SQL Server 项目的进程间通信

web-services - Musicbrainz 艺术家形象和信息

vba - Excel 超链接到带有 ID 或命名 anchor 的网页位置