wcf和Silverlight相对较新。我一直在撞墙试图消化WCF和合同概念。我找到了一篇网页帖子,展示了让WCF工作的方法。正如您将看到的那样,它不遵循经典的WCF形式(没有数据交换)。
以下是代码示例。请注意,ImageData对象不是数据协定的一部分,而只是在具有get和set属性的类cs文件中声明为普通对象。
尽管这不是“监管”,但确实有效。对服务的服务引用会自动移动到ImageData类以及许多其他信息以使其工作。
这很好用。然而,我遇到了一个错误,我已经打了两次之前,我被告知一些模糊的程序集不存在,以允许访问服务。这发生过两次。在所有三种情况下,我都能够重新创建服务和服务引用(但我必须更改两者的名称,因为它们似乎已经存在于项目中)。前两次解决了我的问题。
这次我使用相同的修复程序,但现在代码,而不是返回一个ImageData列表,如函数的签名中所示,现在返回一个名为“GetImageDataReponse”的类型,我不再可以遍历列表ImageData用于返回的对象。在查看“GetImageDataReponse”的定义时,我发现它看起来像另一个VS2010生成的函数,其中嵌入了ImageData列表。它似乎在返回类型(List)上添加了另一层抽象。
我不确定是什么导致了奇怪的“丢失程序集”错误,这些错误似乎随机发生并导致我重建服务。现在我不知道为什么我从之前指定和工作的明确返回类型的函数中获取这些新的返回类型。
任何帮助将不胜感激。我希望能够防止必须首先重建服务和服务参考。
以下是用于工作的代码,然后是reference.cs文件中“GetImageDataReponse”的定义。
谢谢, Fig000
[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;
}
答案 0 :(得分:0)
您是否对版本之间的 ImageData 进行了任何更改?
导致此问题的问题是 ImageData 上的默认(无参数)构造函数或其某个属性。