C# 基于WCF系统开发中的几个设计问题
请遵循以下给定的解决方案结构 在这里,我有一个单一解决方案下的三个主要项目: ServiceClient(它是一个控制台应用程序。使用SQLMonitorServer WCF服务) SQLMonitorEngine(这是写入C#的核心引擎,它帮助我返回已配置sql实例的性能数据。) SQLMonitorService(这是一个wcf服务,它使用SQLMonitorEngine并从引擎中检索数据,并根据请求将该数据传递给ServiceClient) SQLMonitorEngine具有以下给定类 但是在这里,我不能将这个类公开到我的服务器客户端中。因此,我将这个类再次写入SQLMonitorServer,如下所示 请参见下面给出的SQLMonitorServe中的接口和公开的服务方法 在服务器客户端中,我作为 现在的问题是:C# 基于WCF系统开发中的几个设计问题,c#,wcf,C#,Wcf,请遵循以下给定的解决方案结构 在这里,我有一个单一解决方案下的三个主要项目: ServiceClient(它是一个控制台应用程序。使用SQLMonitorServer WCF服务) SQLMonitorEngine(这是写入C#的核心引擎,它帮助我返回已配置sql实例的性能数据。) SQLMonitorService(这是一个wcf服务,它使用SQLMonitorEngine并从引擎中检索数据,并根据请求将该数据传递给ServiceClient) SQLMonitorEngine具有以下给定类
错误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类型错误。如果重命名这两个类中的一个,你会得到与现在相同的错误(当然错误消息中会有新的类名).如果不是这样的话,那就大错特错了。如果你想保留这两个类,你需要找到一种方法将一个转换成另一个。你不能在应该传递另一个的地方传递它们。这是两种不同的类型。