wcfとSilverlightの新機能です。私はWCFと契約のコンセプトを消化しようとしている壁に頭をぶつけていた。私はWCFを動作させる方法を示したWeb投稿を見つけました。ご覧のとおり、これは古典的なWCF形式(dataacontractsなし)には従いません。サービスからのsilverlight-return型のwcfの問題が変更されました!
コードの例を次に示します。 ImageDataオブジェクトはデータコントラクトの一部ではなく、getおよびsetプロパティを持つクラスcsファイルの通常のオブジェクトとして宣言されていることに注意してください。
これは「規制」ではないにもかかわらず、機能します。サービスへのサービス参照は、ImageDataクラスと他の多数の情報を自動的に移動してこの作業を行います。
これは正常に機能しました。しかし、私は、サービスにアクセスできるように、わかりにくいアセンブリが存在しないと言われています。これは二度前に起こった。 3つのケースすべてで、私はサービスとサービス参照を再作成できました(ただし、プロジェクトにすでに存在していたと思われるので、両方の名前を変更する必要がありました)。最初の2回これは私の問題を解決しました。
今回は同じ修正を使用しましたが、関数のシグネチャに示されているImageDataのリストを返す代わりに、コードが "GetImageDataReponse"という型を返すようになりました。返されたImageDataオブジェクトの数。 "GetImageDataReponse"の定義を見ると、ImageDataのリストが埋め込まれた別のVS2010生成関数のように見えます。これは、戻り値の型(リスト)の上に別の抽象レイヤーを追加したようです。
ランダムに発生すると思われる奇妙な「アセンブリの不足」エラーの原因と、サービスを再構築する原因がわかりません。今では、私がなぜこれらの新しい戻り値の型を、明確な戻り値の型が指定され、以前に働いていた関数から得ているのか分かりません。
ご協力いただければ幸いです。私は最初にサービスとサービス参照を再構築する必要がないようにすることを望みます。
以下は、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;
}
あなたの投稿を編集して、それを少し上手く見せようとしました。 2番目のコードサンプルにコードが重複していますか?それを仮定して削除したくなかった。 – Danexxtone
はい。申し訳ありませんが、重複したコードが見つかりました。私はそれを修正することができないとあなたは司会者であると仮定します。お知らせ下さい。 –
参照を追加する方法、Web参照を追加する方法、またはサービス参照を追加する方法を教えてください。とにかく、追加する必要のあるアセンブリの名前を覚えていますか? – Danexxtone