小编Job*_*boy的帖子

COM DLL调用WCF服务的问题

我有一个WCF服务,它有这样的合同:(运营合同是OneWay)

[ServiceContract()]
public interface IEmpUpdate
{
    [OperationContract(IsOneWay = true)]
    void SendEmpUpdate(int _empid);
}
Run Code Online (Sandbox Code Playgroud)

我必须从COM DLL调用此SendEmpUpdate方法.我在网上搜索并找到了一些例子,但那是为了vb.我的COM组件是用C++开发的.我按照相同的步骤在C++中执行此操作.

我遵循的链接:

http://pieterderycke.wordpress.com/2010/10/05/using-the-wcf-service-moniker-to-communicate-between-legacy-com-applications-and-new-net-applications/

此链接说明了两种方法:

1.使用类型化合同来消费WCF服务2.使用MEX端点来消费WCF服务

我试过两种方式:(C++)

第二种方式(使用MEX端点使用WCF服务)请参阅以下代码:

如果我为SendEmpUpdate将OperationContract IsOneWay更改为false,则第二种方式可以正常工作.如果它的真实,Invoke方法失败,HRESULT值为0x80131502(它似乎像ArgumentOutOfRangeException使用HRESULT COR_E_ARGUMENTOUTOFRANGE)


//Importing the tlb:

#import "Employee.tlb" no_namespace named_guids

//Creating the moniker string:

LPTSTR moniker = L"service:mexaddress=net.tcp://localhost:11234/Employee/mex, "
             L"address=net.tcp://localhost:11234/Employee, "
             L"contract=IEmpUpdate, "
             L"binding=nettcpEmpUpdate, ";

//Get the Object:

HRESULT hr = S_FALSE;
IDispatch* objWsc;

hr = CoGetObject(moniker, NULL, IID_IDispatch, (void**)&objWsc);

if (FAILED(hr))
{
    Message(TEXT("Client: CoGetObject"), hr);
    return(hr);
}

DISPID dispid;
BSTR pOperation = L"SendEmpUpdate";

hr = objWsc->GetIDsOfNames(
    IID_NULL,
    &pOperation, …
Run Code Online (Sandbox Code Playgroud)

c# com wcf

1
推荐指数
1
解决办法
2004
查看次数

标签 统计

c# ×1

com ×1

wcf ×1