Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 基于WCF系统开发中的几个设计问题_C#_Wcf - Fatal编程技术网

C# 基于WCF系统开发中的几个设计问题

C# 基于WCF系统开发中的几个设计问题,c#,wcf,C#,Wcf,请遵循以下给定的解决方案结构 在这里,我有一个单一解决方案下的三个主要项目: ServiceClient(它是一个控制台应用程序。使用SQLMonitorServer WCF服务) SQLMonitorEngine(这是写入C#的核心引擎,它帮助我返回已配置sql实例的性能数据。) SQLMonitorService(这是一个wcf服务,它使用SQLMonitorEngine并从引擎中检索数据,并根据请求将该数据传递给ServiceClient) SQLMonitorEngine具有以下给定类

请遵循以下给定的解决方案结构

在这里,我有一个单一解决方案下的三个主要项目: ServiceClient(它是一个控制台应用程序。使用SQLMonitorServer WCF服务)

SQLMonitorEngine(这是写入C#的核心引擎,它帮助我返回已配置sql实例的性能数据。)

SQLMonitorService(这是一个wcf服务,它使用SQLMonitorEngine并从引擎中检索数据,并根据请求将该数据传递给ServiceClient)

SQLMonitorEngine具有以下给定类

但是在这里,我不能将这个类公开到我的服务器客户端中。因此,我将这个类再次写入SQLMonitorServer,如下所示

请参见下面给出的SQLMonitorServe中的接口和公开的服务方法

在服务器客户端中,我作为

现在的问题是:

  • 为什么这里的属性名称是_BackingField。?我不能用它作为普通的名字吗?例如,AuthType直接

  • 由于SQLMonitorServer和SQLMonitorEngine中存在重复的ServerInfo类,因此我的解决方案不会进行调试,并给出以下错误

  • 错误3参数1:无法从'SQLMonitorServer.ServerInfo'转换为'SQLMonitorEngine.ServerInfo'D:\Dev\SQLMonitor\SQLMonitorEngine\SQLMonitorServer\SQLMonitorService.svc.cs 17 46 SQLMonitorServer
    错误2“SQLMonitorEngine.QueryAPI.GetServerVersion(SQLMonitorEngine.ServerInfo)”的最佳重载方法匹配具有一些无效参数D:\Dev\SQLMonitor\SQLMonitorEngine\SQLMonitorServer\SQLMonitorService.svc.cs 17 20 SQLMonitorServer
    
    您的
    ServerInfo
    类需要具有自动属性,而不是字段。因为它有字段,所以您得到了由wcf客户端向导创建的字段


    您的两个
    ServerInfo
    类不是相同的类型,因此您需要创建一个新的类型,并用希望从旧类型中获取的属性填充属性。

    第一个问题已解决。但我不明白你对第二个问题的看法。这里的问题是,SQLMonitorEngine也有相同的类。我的WCF服务调用SQLMonitorEngine的一个方法来检索数据。这里这个方法有一个参数SQLServerInfo。如何在客户端、服务器和引擎上创建此SQLServerInfo??我在这里很困惑。也许你应该重命名你的一个类。这将消除混淆;Console.WriteLine(MonitorServiceClient.GetVersionNumber);在WCF服务器上,公共对象GetSQLVersionNumber(ServerInfo1 serverInfo){return QueryAPI.GetServerVersion(serverInfo);}这里serverInfo是在服务器端定义的,我已经有了一个类库SQLMonitorEngine,这里定义了一个方法公共静态对象GetServerVersion(serverInfo serverInfo){return SQLHelper.ExecuteScalar(“SELECT@@version”,serverInfo);}如果我重命名任何类,它会给我mitchmatched类型错误。如果重命名这两个类中的一个,你会得到与现在相同的错误(当然错误消息中会有新的类名).如果不是这样的话,那就大错特错了。如果你想保留这两个类,你需要找到一种方法将一个转换成另一个。你不能在应该传递另一个的地方传递它们。这是两种不同的类型。