问题是这样的,我有一个COM+应用程序,假设为SVR,内有三个组件A,B,C,其中C有一个接口的方法为Method。现在我想让Method只能被COM+应用程序SVR的内部调用,也就是说只有A,B才能调用Method,而客户端不能直接调用。就象COM+ 1.5中的“使组件专用于应用程序”的效果一样,只不过那个是作用于整个组件的,而我想让一个方法也专用于应用程序。我想过用一个没有配置任何Windows用户的角色来实现,但因为这样的内部方法有不少,而且还需要COM+管理员参与,所以不想通过角色,而通过编程来实现。
谢谢各位的回复,期待精彩的思路。
{
HRESULT CanbeCall(BSTR strValue);
}ClassA : public IUnknown,
public YourInterface,
public ISupportC
{
}ClassC : ....
{
HRESULT Method(Your Param...., IUnknown *pCaller)
{
CComPtr<ISupportC> spISC;
HRESULT hr = pCaller->QueryInterface(&spISC);
if (SUCCEEDED(hr))
{
spISC->CanbeCall(....); //这里做一些必要的验证,防止别人派生ISupportC
}
}
}以下是调用
ClassA a;
ClassC c;
c.Method(..., &a);
应该不可行。由于是COM+环境,暗号机制也应该是公开的。
另辟其它私密的通信渠道算了,比如SOCKET
我已在MSDN Forum上得到了一个比较理想的解决方案:You can use the 'local' attribute in MIDL. [local] will mean that the interface can never be marshaled, and callable only within the same process space, your COM+ application.感谢各位的回贴!