C#如何构建强大的数据类型?

时间:2010-03-10 13:46:14

标签: c#

我希望你们中的一些人可以帮我解决这个问题......

我有一个类库,其中包含1个复杂的类。此类库用于解决方案中的其他2个项目。 1 =控制台应用程序,2 = Web服务应用程序(网站应用程序)。

在控制台应用程序中,我创建了一个asmx Web服务引用,它将我的复杂类作为方法调用中的1参数传递。

该类的类型为:ScheduleSummaryTransport

在控制台应用程序中完成工作的函数是期望从类库DLL绑定的对象,而不是Web服务引用。但是,Web服务调用期望来自Web服务引用的类型为...的参数。

那我该如何施展

ClassLibrary.ScheduleSummaryTransport - > WebService.ScheduleSummaryTransport?

我试过了:

wsReporting.SendReportSummary( (Reporting.ScheduleSummaryTransport) scheduleSummary);

但是在visual studio中它检测到了一个设计时间错误:无法投射表达.....

请协助,谢谢

更新

为了完整性更多代码:

/// <summary>
        /// Sends the schedule report via email.
        /// </summary>
        /// <param name="scheduleSummary">
        /// The schedule summary.
        /// </param>
        private static void SendScheduleReport(ScheduleSummaryTransport scheduleSummary)
        {
            if (!Convert.ToBoolean(ConfigurationManager.AppSettings["EmailSummary"]))
            {
                return;
            }

            Trace.WriteLine(string.Empty);
            Trace.WriteLine("Sending summary by email... please wait ");

            Reporting.Reporting wsReporting = new Reporting.Reporting { Timeout = -1 };
            wsReporting.SendReportSummary( (Reporting.ScheduleSummaryTransport) scheduleSummary);
            Trace.WriteLine("Done...");
        }

3 个答案:

答案 0 :(得分:4)

WebService代理生成器(wsdl.exe)为您生成一个类,用于保存有关通过Web服务传输的对象的所有信息。 这个新类与客户端中引用的类冲突。

您需要摆脱自动生成的类。为此,请在解决方案资源管理器中显示所有文件(顶部的图标)。将有一个类Reference.cs作为Webservice Reference的子代,您可以在其中找到自动生成的代码。在那里添加using ClassLibrary并删除有关重复类的所有代码。

为我工作。 =)

答案 1 :(得分:3)

如果它们是不相关的类型,则无法在它们之间进行投射。这就像试图从String投射到MemoryStream - 您期望发生什么?编译器知道它永远不会工作,所以它阻止你尝试它。

这里的问题是首先有多种类型。如果你可以可能这样做,请避免这样做。如果你不能,你需要编写某种转换方法,在两种类型之间进行转换。

答案 2 :(得分:0)

我仍然不清楚为什么你有两个不同版本的同一个类,但是如果你无法到达你所引用的位置并在两个地方使用类库中的版本,你可能想要查看{ {3}}处理从一个版本到另一个版本的映射。