2011-09-10 2 views
4

일부 JSON WCF 서비스가 포함 된 ASP.NET 웹이있는 Azure 웹 앱을 만들었습니다. 나는 정말로 WCF 서비스 모델에 대해 충분히 알지 못한다. 나는 올바르게하고있다.이 모양이 옳은가? 확장 성, 최대 동시 연결 수 등을 위해 더 나은 다른 서비스 모델 구성이 있습니까?aspNetCompatibilityEnabled = "true"

 <system.serviceModel> 
     <behaviors> 
      <serviceBehaviors> 
      <behavior name=""> 
       <serviceMetadata httpGetEnabled="true" /> 
       <serviceDebug includeExceptionDetailInFaults="true" /> 
      </behavior> 
      </serviceBehaviors> 
     </behaviors> 
     <serviceHostingEnvironment multipleSiteBindingsEnabled="true" aspNetCompatibilityEnabled="true" /> 
     </system.serviceModel> 
    <system.net> 
    <settings> 
     <!-- See http://social.msdn.microsoft.com/Forums/en-US/windowsazuredata/thread/d84ba34b-b0e0-4961-a167-bbe7618beb83 --> 
     <servicePointManager expect100Continue="false" /> 
    </settings> 
    </system.net> 

이 작동하지만 가끔 예기치 않은 연결을 얻을 나를 걱정 내 개발 환경에서 어떤 HTTP 오류 코드와 함께 (시간 초과) 떨어진다.

업데이트 나는 그것이 아약스의 원인이되는 비주얼 스튜디오의 웹 서버가 될 수 있음을 의심하고있어

<system.net> 
    <connectionManagement> 
     <!-- See http://social.msdn.microsoft.com/Forums/en-US/windowsazuredata/thread/d84ba34b-b0e0-4961-a167-bbe7618beb83 --> 
     <add address="*" maxconnection="48" /> 
    </connectionManagement> 
    </system.net> 

의 Web.config

2011년 11월 (24) @하는 것은 시간 제한을 얻기 위해 호출 , 몇 분 후에 서비스가 요청을 다시 받아들입니다. 여기 내 완벽한 설정입니다, 당신은 문제가 무엇인지 알 수 있습니까? 서비스에 대한 Ajax 호출이 하나뿐입니다.

Inferface

IExample.cs :

using System.ServiceModel; 
using System.ServiceModel.Web; 

namespace WebPages.Interfaces 
{ 
    [ServiceContract] 
    public interface IExample 
    { 
     [OperationContract] 
     [WebInvoke(Method = "GET", 
      ResponseFormat = WebMessageFormat.Json)] 
     string GetSomething(string id); 
    } 
} 

ExampleService.svc.cs는

<%@ ServiceHost Language="C#" Debug="true" Service="WebPages.Interfaces.ExampleService" CodeBehind="ExampleService.svc.cs" Factory="System.ServiceModel.Activation.WebServiceHostFactory" %> 

ExampleService.svc.cs이

을 숨김 마크 업 클라이언트에서 691,363,210
namespace WebPages.Interfaces 
{ 
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] 
    public class ExampleService : IExample 
    { 
     string JsonSerializeSomething(Something something) 
     { 
      var serializer = new DataContractJsonSerializer(something.GetType()); 
      var memoryStream = new MemoryStream(); 

      serializer.WriteObject(memoryStream, something); 

      return Encoding.Default.GetString(memoryStream.ToArray()); 
     } 

     public string GetSomething(string id) 
     { 
      var something = DoSomeBusinessLogic(id); 

      return JsonSerializeSomething(something); 
     } 
    } 
} 

jQuery를 호출

function _callServiceInterface(id, delegate) { 
    var restApiCall = "Interfaces/ExampleService.svc/GetSomething?id=" 
      + escape(id); 

    $.getJSON(restApiCall, delegate); 
} 

function _getSomethingFromService() { 
    _callServiceInterface('123', 
     function (result) { 
      var parsedResult = $.parseJSON(result); 
      $('#info').html(result.SomethingReturnedFromServiceCall); 
     } 
    ); 
} 

업데이트

나는이 문제가 지금 무엇인지 생각; WCF 서비스는 기본적으로 단일 threaed 인 것으로 보입니다 (출처 : http://msdn.microsoft.com/query/dev10.query?appId=Dev10IDEF1&l=EN-US&k=k(SYSTEM.SERVICEMODEL.SERVICEBEHAVIORATTRIBUTE.CONCURRENCYMODE);k(TargetFrameworkMoniker-%22.NETFRAMEWORK%2cVERSION%3dV4.0%22);k(DevLang-CSHARP)&rd=true). 그게 내 Ajax 호출이 다른 스레드에 의해 차단 된 시간 제한을받는 이유를 설명합니다.

<%@ ServiceHost Language="C#" Debug="true" Service="WebPages.Interfaces.TagService" CodeBehind="TagService.svc.cs" %> 
,691,363

[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple, InstanceContextMode = InstanceContextMode.PerSession, 
     IncludeExceptionDetailInFaults = false, MaxItemsInObjectGraph = Int32.MaxValue)] 
    //[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] 
    public class ExampleService : IExample 

의 Web.config

<system.serviceModel> 
    <protocolMapping> 
     <add scheme="http" binding="webHttpBinding" bindingConfiguration="" /> 
    </protocolMapping> 
    <behaviors> 
     <endpointBehaviors> 
     <behavior name=""> 
      <webHttp defaultOutgoingResponseFormat="Json" /> 
     </behavior> 
     </endpointBehaviors> 
     <serviceBehaviors> 
     <behavior name=""> 
      <serviceMetadata httpGetEnabled="true" /> 
      <serviceDebug includeExceptionDetailInFaults="false" /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" /> 
    </system.serviceModel> 

ExampleService.svc을

ExampleService.svc.cs :이 코드는 훨씬 더 작업을해야210

업데이트 @ 9.10.2011

나는 내가 여기 Locking with ConcurrencyMode.Multiple and InstanceContextMode.PerCall

aspNetCompatibilityEnabled="false" 필요한 답을 찾은 것 같아 내 WCF 코드에서 HttpContext, ASP.NET 세션 등을 액세스 할 수 없다는 것을 의미한다.

+0

Azure 환경에서 서비스가 작동합니까? 그렇지 않으면 꽤 개방 된 질문입니다. 당신이 원하는 것을 많이 제공하지 않았습니다. –

+0

@ david-hoerster 질문에 더 많은 코드를 추가했습니다. –

답변

관련 문제