私はWCFを初めて使用するので、これはかなり基本的なものだと思います。単一の「注文」オブジェクトが返される簡単な方法があります。デフォルトの XML を使用すると問題なく動作しますが、
ResponseFormat = WebMessageFormat.Json
を返すことができませんJSON
。コードは正常に実行され、リターン行にヒットしますが、メソッドはすぐに再度呼び出され、最後にブラウザがlocalhost への接続が中断されたことを示すエラーを返す前に 3 回目の呼び出しが行われます。
を削除するResponseFormat = WebMessageFormat.Json
と、メソッドが呼び出され、XML が正常に返されます。JSONに欠けているかどうかはわかりません。
IProductSales.cs
namespace ProductsSalesService
{
[ServiceContract(Name = "ProductsSales")]
public interface IProductsSales
{
[OperationContract]
[WebGet(UriTemplate = "Orders/{orderID}", ResponseFormat = WebMessageFormat.Json)]
[Description("Returns the details of an order")]
SalesOrderHeader GetOrder(string orderID);
}
}
製品販売
public SalesOrderHeader GetOrder(string orderID)
{
SalesOrderHeader header = null;
try
{
int id = Convert.ToInt32(orderID);
AdventureWorksEntities database = new AdventureWorksEntities();
header = (from order in database.SalesOrderHeaders
where order.SalesOrderID == id
select order).FirstOrDefault();
}
catch
{
throw new WebFaultException(HttpStatusCode.BadRequest);
}
return header;
}
私は WCF ブックのサンプルに取り組んでいるので、ホストになる小さなコンソール アプリケーションをビルドするように依頼されたので、これがホスト クライアント用の app.config ファイルです。
<?xml version="1.0"?>
<configuration>
<connectionStrings>
<add name="AdventureWorksEntities" connectionString="metadata=res://*/ProductsSalesModel.csdl|res://*/ProductsSalesModel.ssdl|res://*/ProductsSalesModel.msl;provider=System.Data.SqlClient;provider connection string="Data Source=BINGBONG;Initial Catalog=AdventureWorks;Integrated Security=True;MultipleActiveResultSets=True"" providerName="System.Data.EntityClient" />
</connectionStrings>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup><system.serviceModel>
<services>
<service name="ProductsSalesService.ProductsSales">
<endpoint address="http://localhost:8000/Sales" binding="webHttpBinding"
bindingConfiguration="" name="ProductsSalesService.ProductsSales"
contract="ProductsSalesService.IProductsSales" />
</service>
</services>
</system.serviceModel>
</configuration>
最後に、これは単なるホスト クライアント コードです。
public class Program
{
static void Main(string[] args)
{
WebServiceHost host = new WebServiceHost(typeof(ProductsSalesService.ProductsSales));
host.Open();
Console.WriteLine("Service running");
Console.WriteLine("Press ENTER to stop the service");
Console.ReadLine();
host.Close();
}
}
そのhttp://localhost:8000/Sales/Orders/43659
ため、注文を取得しようとすると、3 回ヒットし、ページが Chrome でキャンセルされ、次のエラーが表示されます。
この Web ページは利用できません localhost への接続が中断されました。いくつかの提案があります: この Web ページを後でリロードします。インターネット接続を確認してください。使用しているルーター、モデム、またはその他のネットワーク デバイスを再起動します。ファイアウォールまたはウイルス対策ソフトウェアの設定で、許可されたプログラムとして Google Chrome を追加します。既に許可されているプログラムである場合は、許可されたプログラムのリストから削除し、再度追加してみてください。プロキシ サーバーを使用している場合は、プロキシ設定を確認するか、ネットワーク管理者に問い合わせて、プロキシ サーバーが機能していることを確認してください。プロキシ サーバーを使用する必要がないと思われる場合は、プロキシ設定を調整してください。ツール メニュー > [設定] > [詳細設定を表示...] > [プロキシ設定を変更...] に移動します。
LAN 設定を開き、[LAN にプロキシ サーバーを使用する] チェックボックスの選択を解除します。エラー 101 (net::ERR_CONNECTION_RESET): 接続がリセットされました。
私がWebMessageFormat.Json
すべてを削除すると、正常に動作します!
ご協力ありがとうございます。