【发布时间】:2011-07-09 00:08:56
【问题描述】:
相对较新的 wcf 和 Silverlight。我一直在努力消化 WCF 和合同概念。我发现了一个网络帖子,显示了一种使 WCF 工作的方法。如您所见,它不遵循经典的 WCF 形式(无数据合同)。
这是代码示例。请注意,ImageData 对象不是数据协定的一部分,而只是在具有 get 和 set 属性的 class cs 文件中声明为普通对象。
尽管这不是“监管”,但它确实有效。对服务的服务引用会自动移动到 ImageData 类和许多其他信息以使这项工作正常进行。
这很好用。但是,我遇到了一个错误,之前我已经遇到过两次错误,我被告知不存在某些晦涩的程序集以允许访问该服务。这种情况以前发生过两次。在所有三种情况下,我都能够重新创建服务和服务引用(但我不得不更改两者的名称,因为它们似乎已经存在于项目中)。前两次这解决了我的问题。
这一次我使用了相同的修复,但现在代码,而不是返回函数签名中指示的 ImageData 列表,现在返回一个名为“GetImageDataReponse”的类型,我不再可以遍历列表ImageData 它用来返回的对象。在查看“GetImageDataReponse”的定义时,我发现它看起来像是另一个 VS2010 生成的函数,其中嵌入了 ImageData 列表。它似乎在返回类型(List)之上又增加了一层抽象。
我不确定是什么导致了奇怪的“缺少程序集”错误,这些错误似乎是随机发生并导致我重建服务。现在我不确定为什么要从具有明确返回类型的函数中获取这些新的返回类型,并且以前可以使用。
任何帮助将不胜感激。我希望能够避免必须首先重建服务和服务引用。
下面是以前工作的代码,然后是reference.cs文件中“GetImageDataReponse”的定义。
谢谢, 图000
[OperationContract]
public List<ImageData> GetImageData(int imageID)
{
List<ImageData> ImageDataList = new List<ImageData>();
SqlConnection con = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["CN_eLogWeb"].ConnectionString.ToString());
SqlDataReader dr = null;
string sql = @"SELECT isnull(i.ANI,'') as ANI, isnull(i.DonorCorpID,0) as DonorCorpID,isnull(i.DonorUnitID,0) as DonorUnitID,isnull(i.AgencyID,0) as AgencyID,
isnull(i.PickupDT,'1/1/1900') as PickupDT, isnull(u.InBoundSortedStatusID,1) as InboundSortedStatusID, isnull(u.FollowupRequired,0) as FollowupRequired
from InboundSorted i
left join UserSortSessionInfo u on i.IncomingID=u.IncomingID
left join Image img on i.ImageID=img.ImageID where img.ImageID=" + imageID;
con.Open();
SqlCommand cmd = new SqlCommand(sql, con);
dr = cmd.ExecuteReader();
if (dr.HasRows)
{
while (dr.Read())
{
ImageData oImageData = new ImageData
{
ANI = Convert.ToString(dr["ANI"]),
DonorCorpID = Convert.ToInt32(dr["DonorCorpID"]),
DonorUnitID = Convert.ToInt32(dr["DonorUnitID"]),
AgencyID = Convert.ToInt32(dr["AgencyID"]),
PickupDT = Convert.ToDateTime(dr["PickupDT"]),
Status = GetInboundSortedStatus(Convert.ToInt32(dr["InboundSortedStatusID"])),
FollowupRequired = Convert.ToBoolean(dr["FollowupRequired"])
};
ImageDataList.Add(oImageData);
}
}
con.Close();
return ImageDataList;
}
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
[System.ServiceModel.MessageContractAttribute(WrapperName="GetImageDataResponse", WrapperNamespace="", IsWrapped=true)]
public partial class GetImageDataResponse {
[System.ServiceModel.MessageBodyMemberAttribute(Namespace="", Order=0)]
public System.Collections.Generic.List<acSilverlightLib.ImgServiceRef2.ImageData> GetImageDataResult;
public GetImageDataResponse() {
}
public GetImageDataResponse(System.Collections.Generic.List<acSilverlightLib.ImgServiceRef2.ImageData> GetImageDataResult) {
this.GetImageDataResult = GetImageDataResult;
}
}
if (dr.HasRows)
{
while (dr.Read())
{
ImageData oImageData = new ImageData
{
ANI = Convert.ToString(dr["ANI"]),
DonorCorpID = Convert.ToInt32(dr["DonorCorpID"]),
DonorUnitID = Convert.ToInt32(dr["DonorUnitID"]),
AgencyID = Convert.ToInt32(dr["AgencyID"]),
PickupDT = Convert.ToDateTime(dr["PickupDT"]),
Status = GetInboundSortedStatus(Convert.ToInt32(dr["InboundSortedStatusID"])),
FollowupRequired = Convert.ToBoolean(dr["FollowupRequired"])
};
ImageDataList.Add(oImageData);
}
}
con.Close();
return ImageDataList;
}
【问题讨论】:
-
我试图编辑你的帖子,让它看起来更好一点。第二个代码示例中是否有重复的代码?不想假设和删除它。
-
是的。抱歉,我确实找到了重复的代码。我假设我无法修复它并且您是版主。让我知道。
-
您是如何添加引用的:添加引用、添加 Web 引用还是添加服务引用?你还记得需要添加的程序集的名称吗?
标签: silverlight wcf