特定のBotのみコンテンツアップロードができない。
担当者様および有識者の方々
お世話になります。
首記の件で相談をさせて下さい。
現在C#でコンテンツアップロードのプログラムを作成しており
複数のBot(①、②)でテストを実施していますが、
一部のBotで例外が発生し下記のメッセージが返ります。
「"転送接続からデータを読み取れません: 既存の接続はリモート ホストに強制的に切断されました。。"」
(LineWorks側でリトライが発生しているのか例外が返るまで5秒ほどかかります)
Botの設定に誤りがあるかと思っていたのですが
Postmanを利用すると問題なくアップロード処理ができます。
C#プログラム | Postman | |
Bot① | アップロード可能 | アップロード可能 |
Bot② | 上記の例外発生 | アップロード可能 |
この場合の原因として何が考えられるかご教授お願いします。
※実行したプログラム
using System; using System.Linq; using System.Net.Http; using System.IO; using System.Net.Http.Headers; namespace SendImageToLineWorks { class Program { private static readonly string ApiId = "ApiId"; private static readonly string ConsumerKey = "ConsumerKey"; private static readonly string Token = "Token"; private static readonly string URL = "http://storage.worksmobile.com/openapi/message/upload.api"; static string Path = "アップロードファイルのフルパス"; private static readonly HttpClient Client = new HttpClient(); static void Main(string[] args) { try { // HTTP要求メッセージ(HttpRequestMessage)作成 using (var requestMessage = new HttpRequestMessage(HttpMethod.Post, URL)) // MIMEの種類[multipart/form-data]を使用してエンコードされたコンテンツのコンテナ作成 using (var dataContent = new MultipartFormDataContent()) using (var fileStream = File.OpenRead(Path)) // ストリームに基づいて HTTP コンテンツを提供するクラスの生成 // ※基本クラスはHTTPエンティティ本体およびコンテンツヘッダーを表す「HttpContent」 using (var streamContent = new StreamContent(fileStream)) { // 要求ヘッダーに指定のヘッダーを追加 requestMessage.Headers.Add("consumerKey", ConsumerKey); requestMessage.Headers.Add("Authorization", string.Format("Bearer {0}", Token)); requestMessage.Headers.Add("x-works-apiid", ApiId); // HTTP応答のContent-Typeから「boundary」の値を取得、「"」を削除して再設定 var boundary = dataContent.Headers.ContentType.Parameters.First(o => o.Name == "boundary"); boundary.Value = boundary.Value.Replace("\"", string.Empty); // HTTP応答のContent-Dispositionコンテンツヘッダーの値を設定 streamContent.Headers.ContentDisposition = // Content-Dispositionヘッダーの値クラス生成 new ContentDispositionHeaderValue("form-data") { Name = "\"resourceName\"", // コンテンツのボディ部の名前 FileName = string.Format("\"{0}\"", new FileInfo(Path).Name) // ペイロードを格納するためのファイル名 }; // HTTP応答のContent-Typeコンテンツヘッダーの値を設定 streamContent.Headers.ContentType = new MediaTypeHeaderValue("image/png"); // マルチパート/フォームデータのMIMEの種類にシリアル化されるHttpContentオブジェクトのコレクションにHTTPコンテンツを追加 dataContent.Add(streamContent); // HTTPメッセージの内容を設定 requestMessage.Content = dataContent; var response = Client.SendAsync(requestMessage).Result; var resStatus = response.StatusCode; } } catch(Exception e) { Console.WriteLine(e); } } } } |
投稿に新しいコメントが追加されましたら通知を送信します。
コメント4
업데이트 된 답글입니다.
Koshi検証用 投稿者
テストデータ作成者に確認したところ
Bot①、Bot②を「同じメールアドレス」で認証したそうです。
その為かAPI_IDは以下のように採番されています。
Bot① ⇒ jp1・・・・
Bot② ⇒ jp2・・・・
3文字目が「2」のAPI_IDだと上記の例外が発生します。
2021.10.04
업데이트 된 답글입니다.
Koshi検証用 投稿者
Bot②ですが、リクエストヘッダーから「Expect :100-continue」を削除することで
コンテンツアップロードができました。
(ただBot①等は上記の有無に関係なくアップロードが正常に行えます)
上記の事実を含め本当の解決策を教えてください。
2021.10.05
업데이트 된 답글입니다.
Koshi検証用 投稿者
-------------------------------------------------------------------------------------
①:エラーの発生原因
②:上記の条件(同一メールアドレスでの複数アカウント作成)でのみ
発生する事象か否か
③:②の仮説が正しい場合、現時点では同一メールアドレスでの複数アカウント作成は
警告が表示され実行できないので今後は本事象は発生しないと断定できるか
-------------------------------------------------------------------------------------
2021.10.06
업데이트 된 답글입니다.
LINE WORKS 公式アカウント
個別の環境によるエラーに関しましては、担当のパートナー営業までご相談ください。
2021.10.08
まだ、解決できませんか?
今すぐ実際に使用しているLINE WORKSユーザーに質問してみましょう。