使用相同的WSDL在2个项目之间键入兼容性

时间:2014-01-17 17:46:46

标签: c# .net wcf wsdl

我有以下

ProjectA - 我正在创建一个帮助方法来接受wsdl生成的类型(.csproj基于.NET 2.0,因为它必须是我们的遗留代码)

ProjectAIntegrationTests (。csproj基于.NET 4.5)

我已经将WCF服务的服务引用添加到两个项目中以便使用它,因为我想在projectA中创建一个我的Integration测试将测试的帮助器方法。我打算发一个

示例:

ProjectA - 包含一个帮助方法,允许我发送请求并获得回复

我发送的类型是该类型的代理实例,或者至少我的意图是如何执行此操作。

using OurCompany.SomeAppName1.Payment.Integration.Tests.PaymentService

namespace EventInventory.TicketPoint.Payment
{
    public static class HttpClientHelper
    {
        public static PreAuthorizeResponse SendHttpRequest(PreAuthorizeRequest authorizationRequest)
        {
            PreAuthorizeResponse response;
            var service = new PaymentService.PaymentService();
            response = service.PreAuthorize(authorizationRequest);

            return response;
        }
    }
}       

ProjectAIntegrationTests - 来自

的相关集成测试
using System;
using OurCompany.SomeAppName1.Payment.PaymentService;
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace OurCompany.SomeAppName1.Payment.Integration.Tests
{
    [TestClass]
    public class HttpClientHelperTests
    {
        ...
        [TestMethod]
        public void SendRequest_PreAuthorizatoinWithMinimumValues_ReturnsAuthorizationRespones()
        {
            // Arrange
            PaymentsClient serviceClient = new PaymentsClient(); // proxy client from wsdl
            ... more code
            var preAuthorizeRequest = CreatePreAuthorizeRequest(transactionData, _merchantReference, _securityToken);

            // Act
            PreAuthorizeResponse preAuthorizeResponse = HttpClientHelper.SendHttpRequest(preAuthorizeRequest);

            // Assert

        }

我得到的错误是它没有识别我发送到HttpClientHelper.SendHttpReques()的PreAuthorizationRequest实例,说下面的内容:"OurCompany.SomeAppName1.Payment.Integration.Tests.PaymentService.PreAuthorizationRequest is not assignable to OurCompany.SomeAppName1.Payment.PaymentService.PreAuthorizationRequest"

因此类型不兼容。

根据.NET

OurCompany.SomeAppName1.Payment.Integration.Tests.PaymentService.PreAuthorizationRequest不是OurCompany.SomeAppName1.Payment.PaymentService.PreAuthorizationRequest

请注意,我唯一可以解决的不同是服务背后的命名空间。我不知道这是否重要,但感觉可能是问题,不确定。如果这是真的那么你不能跨项目共享客户端代理类型?每个项目都有自己的特定于该项目的命名空间。我的第二个项目在命名空间中有Integration.Tests。

也许这是一个跨界的东西也会起作用?

1 个答案:

答案 0 :(得分:0)

尝试将您的代理类视为完全不同的类。即使两个类具有相同的名称且相同(因为它们是从相同的wsdl生成),但这并不意味着您可以使用namespace1.ServiceClient类型的对象,其中需要namespace2.ServiceClient。

通常,一旦将ProjectA的引用添加到ProjectAIntegrationTests,您就可以在ProjectAIntegrationTests中使用服务引用生成的代码。您无需在ProjectAIntegrationTests项目中添加新的服务引用。

您还需要在ProjectAIntegrationTests上添加App.Config,并在其中添加访问该服务所需的配置(您可以从ProjectA复制必要的配置)。