Microsoft Stackを使用しています:Windows Server 2008 R2 / IIS 7.5; .NET 4.0
ローカルホストでサービスを設定すると、クライアントは問題なく操作を呼び出します。サービスのセットアップ(元々はPostとして、次にGetとして).NETから次のエラーが発生します(以下の方法)。フィドラーを介して直接電話をかけると、すべてが機能し、(RAW)ヘッダーは次のようになります。
HTTP / 1.1 200 OK Cache-Control:private Content-Length:19854411 Content-Type:application / xml; charset = utf-8サーバー:Microsoft-IIS / 7.5 X-AspNet-バージョン:4.0.30319 X-Powered-By:ASP.NET
コンソールアプリまたはWindowsサービスを介して電話をかけると、「リモートサーバーがエラーを返しました:<411>長さが必要です。」というエラーが表示されます。
いくつかの作業を行った後にzipファイルを返すことになっているWebサービスがあります
[OperationContract]
[WebInvoke(UriTemplate = "/GetFiles/{profileLocationId}/{batchSize}", Method = "GET", RequestFormat = WebMessageFormat.Xml, BodyStyle = WebMessageBodyStyle.Bare)]
public byte[] ProfileImagesByProfileId(string profileLocationId, string batchSize)
{
// var watch = new Stopwatch();
// watch.Start();
try
{
long id = 0;
long.TryParse(profileLocationId, out id);
int size = 200;
int.TryParse(batchSize, out size);
var profileRoot = ConfigurationManager.AppSettings["ProfileImageRootDirectory"];
var fileType = ConfigurationManager.AppSettings["ProfileImageDefaultFileType"];
var packer = new ImagePackager(profileRoot, fileType);
if (profileLocationId != null)
{
var stream = packer.CompressImages(id, size);
return stream;
}
}
catch (Exception ex)
{
return new byte[0];
}
return new byte[0];
}
}
===========================
クライアントメソッド
static void TimerElapsed(object sender, ElapsedEventArgs e)
{
var id = GetLastProfileId();
// var uri = string.Format("http://{0}/TwitterService/ProfileImages/{1}/{2}", _ipAddress, id, _batchsize);
var uri = string.Format("http://{0}/Twitter_api/TwitterService/ProfileImages/{1}/{2}", _ipAddress, id, _batchsize);
GetProfileImagesFromService(uri);
}
private static void GetProfileImagesFromService(string uri)
{
try
{
Console.WriteLine("Process started: {0}", DateTime.Now.ToLongTimeString());
var request = WebRequest.Create(uri);
request.Method = "GET";
request.Timeout = 600000;
using (var response = (HttpWebResponse)request.GetResponse())
{
Console.WriteLine(response.StatusDescription);
var dataStream = response.GetResponseStream();
var reader = new StreamReader(dataStream, Encoding.UTF8);
// var responseFromServer = reader.ReadToEnd();
var fileName = string.Format(@"{0}\{1:yyMMddhhmmss}.zip", _targetDirectory, DateTime.UtcNow);
// File.WriteAllText(fileName, responseFromServer);
// var xml = XDocument.Parse(responseFromServer);
var xml = XDocument.Load(reader);
var base64 = xml.Root.Value.ToCharArray();
var byteArray = Convert.FromBase64CharArray(base64, 0, base64.Length);
File.WriteAllBytes(fileName, byteArray);
Console.WriteLine("GetProfile cycle ended: {0}", DateTime.Now.ToLongTimeString());
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
任意のガイダンスをいただければ幸いです。
前もって感謝します。