从BizTalk使用具有相同名称和相同目标命名空间的WCF服务

时间:2009-07-30 17:54:16

标签: wcf biztalk

我有像这样的WCF服务服务方案

命名空间Company.BO.Contracts {

public interface ITypeService  {    }

public partial interface IType1Services : ITypeService  
{
    [OperationContract()]
    Type1 GetType1(System.Int32 idValue);

    [OperationContract()]
    Type1 Save(Type1 myType1, System.Int32 changeUser);
}

public partial interface IType2Services : ITypeService  
{
    [OperationContract()]
    Type2 GetType2(System.Int32 idValue);

    [OperationContract()]
    Type2 Save(Type2 type2, System.Int32 changeUser);
}

}

命名空间Company.ContractFulfillment {

public class Type1Services : IType1Services
{
    public MyType1 GetType1(System.Int32 idValue)
    {
        return new Type1();
    }
}

public class Type2Services : IType2Services
{
    public Type2 GetType2(System.Int32 idValue)
    {
        return new Type2();
    }
}

}

当我将上述代码公开为WCF服务时,BizTalk无法在Type1.Save()和Type2.Save()之间进行区分。有没有办法不修改服务,因为服务是框架的一部分,需要在其他依赖的地方进行更多的更改?

对于BizTalk以外的客户端,服务访问层被包装到类型库(type1,type2等)中,客户端将此类型库作为普通类库进行访问。

2 个答案:

答案 0 :(得分:0)

你能在类型1界面上放一个[ServiceContractAttribute(Namespace =“http://company.com/services/type1/”)]吗?为每个服务合同使用不同的命名空间,因为它们是不同的合同。

答案 1 :(得分:0)

您可以构建一个放置在框架和Biztalk之间的WCF服务

在这个新服务中将Type1.Save()实现为Type1.SaveType1()。

不是特别优雅,但它会起作用。