控制台 C# 应用有多个项目。有几个需要单独的服务引用来进行 SOAP 调用。无法正确获取依赖项



以简单的形式,我编写了一个控制台应用程序,它(在许多其他事情中)对不同的Web服务进行两个SOAP调用。这是一个独立的解决方案,因此我只是将两个WSDL文件作为服务引用放入,并创建包装器类来调用它们并返回数据。我在项目中创建了两个服务引用GetSessionSubscriptionNotifications,并编写了两个包装器类来实例化soap客户机、初始化它们、调用它们并返回数据。代码是私有的,所以我只能显示片段。

解决方案资源管理器基本显示:

Solution 'MySolution'
  MySolution
    Properties
    References
    ServiceReferences (folder)
      GetSession
      SubscriptionNotifications
    Code (folder for .cs files)
      Program.cs
      EmailUtil.cs
      DataRepository.cs
      SOAP_GetSession.cs
      SOAP_SendSubscriptionNotifications.cs
    App.config
    packages.config

在SOAP_GetSession.cs(部分代码)中我写了

using MyNamespace.GetSession;  // the autogenerated SOAP client
namespace MyNamespace.MySolution.Code
{
  class SOAP_GetSession {
    public static string GetAppToken() {
      string env = configFile.GetConfigValue("Environment");
      string userName = configFile.GetConfigValue("UserName");
      string password = configFile.GetConfigValue("Password");
      string appId = configFile.GetConfigValue("ApplicationId");
      string appToken = "";
      try {
        ServiceClient sc = new ServiceClient();
        SessionResponse sr = sc.GetSession(env, userName, password, appId);
        appToken = sr.ApplicationSession;
      }
      catch (...) {
       // do exception handling
      }
      return appToken;
    }
  }
}

我跳过了类中大部分不重要的代码,但这是本质,它工作得很好。现在,我想采用这两个SOAP调用,并在解决方案中创建单独的项目作为类库,并将SOAP功能移动到这些项目中,以便项目可以在其他解决方案中完整地使用。我一整天都在遇到没完没了的引用和命名空间问题。尽管这些项目是独立的,没有依赖关系,而且每个项目都有自己的ServiceReference WSDL客户机,但我无法正确地组合"使用"、引用、名称空间和依赖关系,以使任何一个程序在我自己的代码中识别其SOAP客户机的对象和方法。我所尝试的一切都带来了在命名空间中找不到ServiceClient或GetSession()ServiceResponse引用的错误。我用名称空间限定了它们,用语句插入了它们,以及我能想到的一切都无济于事。

有没有人能像我上面展示的那样,画出一个简单的类和方法,可以在自己的项目中工作,并可以被主启动项目引用?

  1. 创建一个新的类库项目。
  2. 为您的web服务添加一个服务引用
  3. 将SOAP_GetSession.cs和SOAP_SendSubscriptionNotifications.cs移到该项目
  4. 从控制台应用程序项目中删除服务引用
  5. 在控制台应用程序中添加对新项目的引用
  6. 在你需要在控制台应用程序中使用SOAP_GetSession的文件中,确保添加using MyNamespace.MySolution.Code

它看起来是这样的:

Solution 'MySolution'
  MySolution
    Properties
    References
      MyClassLibrary
      All other references
    Code (folder for .cs files)
      Program.cs
      EmailUtil.cs
      DataRepository.cs
    App.config
    packages.config
  MyClassLibrary     
    Properties
    References
    ServiceReferences (folder)
      GetSession
      SubscriptionNotifications
    Code (folder for .cs files)
      SOAP_GetSession.cs
      SOAP_SendSubscriptionNotifications.cs
    App.config
    packages.config

你将能够在你将要创建的其他项目中引用MyClassLibrary。您不需要为每个项目添加服务引用。请记住,您可能需要将端点和其他服务配置设置从库app.config复制到您创建的每个顶级项目的主app.config中。

相关内容

  • 没有找到相关文章

最新更新