2017-03-08 6 views
0

post、datacontractを使用してjavascriptからwcfサービスに画像をアップロードします。 私はgoogleでdatacontractを使用して読むことはできません。メッセージ契約で行うことができます.1つのパラメータがストリームの場合は、他のパラメータを持たないはずです。datacontractを使用してwcfサービス用のユーザーIDとともにイメージをアップロードする

しかし、いくつかのリンクでは、クエリ文字列にパラメータを渡すことによって行うことができます。 (例:WCF Restful service file upload with multi-platform support) 私はそれを試しましたが、まだストリームがパラメータとして存在するかどうかを言っているエラーを取得していますが、他のパラメータを含むべきではありません。 しかし、クエリ文字列でもそれはできませんか? 次は私のコード

[OperationContract] 
    [WebInvoke(Method = "POST",UriTemplate = "/UploadFile/userId={userId}", BodyStyle = WebMessageBodyStyle.WrappedRequest)] 
    void UploadFile(string userId,Stream uploadingDetails); 

答えて

0

あるストリームparamenterは、あなたの運転の契約の最後のパラメータでなければなりません。 v3.5または4.0を使用すると、そのエラーが表示されます。しかし、あなたはそれを無視することができます。

[DataContract] 
public class UploadData 
{ 
    [DataMember] 
    string userId { get; set; } 

    [DataMember] 
    Stream uploadingDetails { get; set; } 
} 

public class YourService : IYourService 
{ 

    public bool UploadFile(UploadData request) 
    { 
    } 
} 

をまたはちょうどウルURLで.SVC回避しようと、ストリームを使用しているときは、1つのより多くの選択肢があります。さもないと、あなたは次のようにやってみることができます。以下のコードを追加:

public class Global : System.Web.HttpApplication 
{ 
    RouteTable.Routes.Add(new ServiceRoute("yourApp/yourService/upload", new WebServiceHostFactory(), typeof(YourService))); 
} 

をし、あなたのサービスには、以下の属性を飾る:

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] 

と以下のようにあなたのサービスを呼び出すを:

http://localhost:123456/yourApp/yourService/upload/{userId} 
+0

こんにちは、あなたの最初のコードサンプルは、私を助けていませんでし私はまだ同じエラーが発生しています。あなたは私に完全なコードサンプルを提供してください(また、フォームのjavascriptを呼び出す方法もあります)、他のサンプルについても教えてください。ありがとう。 –

関連する問題