2009-07-29 3 views
1

안녕하세요! 나는 이것을 계산하려고 하루 반을 보냈다. 잘하면 당신 중 하나가 도울 수 있습니다.WCF 서비스 내에서 RenderControl이 실패합니다. ASMX 작동

제한된 CMS를 작성했으며 CMS의 콘텐츠를 외부 사이트의 삽입 광고 페이지로 표시 할 수 있도록 노력하고 있습니다. 이를 위해 적절한 컨텐트를 렌더링하고 클라이언트 페이지에 배치 할 문자열로 반환하는 WCF 서비스를 만들고 싶습니다.

그러나 이상한 행동이 있습니다. RadioButtonListCheckBoxList 컨트롤은 RenderControlInternal (분명히 기여하지 않음) 동안 NullReferenceException을 던집니다. 다른 모든 컨트롤 (텍스트 상자, 목록 상자, 드롭 다운, 사용자 정의 합성 컨트롤)은 잘 렌더링됩니다.

WCF 서비스와 함께 ASMX 서비스를 만들고 WCF 서비스에서 직접 코드를 잘라내어 붙여 넣었습니다. 컨트롤을 완벽하게 렌더링합니다.

WCF 서비스가 선택적으로 폭탄을 유발하는 단서가 있습니까? 여기 ControlHelper.RenderControl의 코드는 (. 예, 그것은 VB에서의 그것은 다른 프로젝트에 살고)입니다

public string RenderPageContents(int pageId) 
    { 
     string output = string.Empty; 

     SiteBuilder.Page p = new SiteBuilder.Page(); 
     if (p.Load(pageId)) 
     { 
      foreach (SiteBuilder.PageItem pi in p.Items) 
      { 
       if (pi.LoadItemDetails(true)) 
       { 
        // Calls LoadControl from \Bin 
        Web.Controls.Base.BuilderControlBase bcb = 
          Web.Controls.ControlHelper.CreateSiteBuilderControl(
           @"C:\Development\SitebuilderService\", 
          pi.ItemDetails); 

        if (bcb != null) 
        { 
         bcb.Configure(pi); 
         output += ControlHelper.RenderControl(ref bcb); 
        } 
       } 
      } 
     } 

     return output; 
    } 

: 여기

는 서비스 방법 코드입니다.

Public Shared Function RenderControl(ByRef ctrl As Controls.Base.BuilderControlBase) _ 
     As String 
    Dim sb As New StringBuilder() 
    Dim tw As New StringWriter(sb) 
    Dim hw As New HtmlTextWriter(tw) 

    ctrl.RenderControl(hw) 

    Return sb.ToString() 
End Function 

예외 메시지는 "개체 참조가 개체의 인스턴스로 설정되지 않았습니다."입니다.

at System.Web.UI.WebControls.RadioButtonList.Render(HtmlTextWriter writer) 
at System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter) 
at System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter) 
at System.Web.UI.Control.RenderControl(HtmlTextWriter writer) 
at System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children) 
at System.Web.UI.Control.RenderChildren(HtmlTextWriter writer) 
at System.Web.UI.WebControls.TableCell.RenderContents(HtmlTextWriter writer) 
at System.Web.UI.WebControls.WebControl.Render(HtmlTextWriter writer) 
at System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter) 
at System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter) 
at System.Web.UI.Control.RenderControl(HtmlTextWriter writer) 
at System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children) 
at System.Web.UI.Control.RenderChildren(HtmlTextWriter writer) 
at System.Web.UI.WebControls.WebControl.RenderContents(HtmlTextWriter writer) 
at System.Web.UI.WebControls.WebControl.Render(HtmlTextWriter writer) 
at System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter) 
at System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter) 
at System.Web.UI.Control.RenderControl(HtmlTextWriter writer) 
at System.Web.UI.WebControls.Table.RenderContents(HtmlTextWriter writer) 
at System.Web.UI.WebControls.WebControl.Render(HtmlTextWriter writer) 
at System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter) 
at System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter) 
at System.Web.UI.Control.RenderControl(HtmlTextWriter writer) 
at System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children) 
at System.Web.UI.Control.RenderChildren(HtmlTextWriter writer) 
at System.Web.UI.WebControls.TableCell.RenderContents(HtmlTextWriter writer) 
at System.Web.UI.WebControls.WebControl.Render(HtmlTextWriter writer) 
at System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter) 
at System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter) 
at System.Web.UI.Control.RenderControl(HtmlTextWriter writer) 
at System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children) 
at System.Web.UI.Control.RenderChildren(HtmlTextWriter writer) 
at System.Web.UI.WebControls.WebControl.RenderContents(HtmlTextWriter writer) 
at System.Web.UI.WebControls.WebControl.Render(HtmlTextWriter writer) 
at System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter) 
at System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter) 
at System.Web.UI.Control.RenderControl(HtmlTextWriter writer) 
at XXX.ControlHelper.RenderControl(BuilderControlBase& ctrl) 
    in C:\TFS\XXX\Development\XXX\Web\Controls\Builder\Helpers\ControlHelper.vb:line 81 
at XXX.Services.SiteBuilderService.RenderPageContents(Int32 pageId) 
    in C:\TFS\Development\XXX.Web.Services\XXX.Web.Services\SiteBuilderService.svc.cs:line 61 

는 WCF 서비스는 별도라는 올바른 문자열을 반환합니까 : WCF를 사용하는 경우 다음

가 발생 예외의 스택 트레이스입니까?

정확한 의미를 모르겠습니다. 무엇과는 별도로? 테스트 하니스에서 처리하는 비즈니스 클래스를 호출하면 올바르게 작동합니다. ASMX 서비스에서 호출하면 제대로 작동합니다. WCF에서 라디오 단추 렌더링이 중단됩니다.

WCF 서비스에 어떤 종류의 바인딩 및 보안을 사용합니까?

저는 basicHttpBinding을 사용하고 있습니다.

<binding name="BasicHttpBinding_ISiteBuilderService" closeTimeout="00:01:00" 
       openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" 
       allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" 
       maxBufferSize="1024000" maxBufferPoolSize="524288" maxReceivedMessageSize="1024000" 
       messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" 
       useDefaultWebProxy="true"> 
     <readerQuotas maxDepth="32" maxStringContentLength="1024000" maxArrayLength="16384" 
      maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
     <security mode="None"> 
     <transport clientCredentialType="None" proxyCredentialType="None" 
      realm="" /> 
     <message clientCredentialType="UserName" algorithmSuite="Default" /> 
     </security> 
    </binding> 


<endpoint address="" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_ISiteBuilderService" contract="SiteBuilder.ISiteBuilderService" name="BasicHttpBinding_ISiteBuilderService" /> 

<service behaviorConfiguration="Xxx.SiteBuilderServiceBehavior" 
    name="Xxx.Services.SiteBuilderService"> 
    <endpoint address="" binding="basicHttpBinding" contract="Kaplan.OEC.Services.ISiteBuilderService"> 
     <identity> 
     <dns value="localhost" /> 
     </identity> 
    </endpoint> 
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> 
    </service> 

<behavior name="Xxx.Services.SiteBuilderServiceBehavior"> 
     <serviceMetadata httpGetEnabled="true" /> 
     <serviceDebug includeExceptionDetailInFaults="true" /> 
    </behavior> 

당신은 예를 들어,에서 서비스를 호출하는 경우 SoapUI - 그것은 예상 된 형식으로 문자열을 반환합니까? 또는 일부 태그 및/또는 특수 문자가 엉망이 될 수 있습니까?

SoapUI에서 올바르게 렌더링되지 않으면 WCF에서와 같은 오류가 발생합니다.

답변

0

별도로 호출 할 때 WCF 서비스가 올바른 문자열을 반환합니까? WCF 서비스에 어떤 종류의 바인딩과 보안을 사용합니까? 일부 구성 (서버 측 및 클라이언트 측)을 게시 할 수 있습니까?

ASMX 레거시 서비스에 가장 가까운 바인딩은 기본적으로 모든 보안이 해제 된 basicHttpBinding입니다. 그거 사용하고 있니?

예를 들어. SoapUI - 그것은 예상 된 형식으로 문자열을 반환합니까? 또는 일부 태그 및/또는 특수 문자가 엉망이 될 수 있습니까?

2

WCF 구성에서 ASP.NET compatibility mode을 켜 보았습니까? 오류가 가능성이 HttpContext 사용할 수없는 관련이 있습니다 (비록 내가 말할 수 있지만 현재 접근 가능, 아마도 실행 가능한, 오히려 추한 :-))

+0

나는 이것이 문제가 될 수도 있습니다. .NET Reflector를 사용하여 System.Web.UI.WebControls.RadioButtonList.Render를 열었고이 코드를 발견했습니다. "If (Not MyBase.DesignMode AndAlso Not Me.Context.Request.Browser.Tables) Then". 컨텍스트를 살펴보면 page.Context가 null이면 HttpContext.Current가 반환됩니다. –

+0

또는 대부분의 질문이 C#에서 게시 되었기 때문에 : if (! base.DesignMode &&! this.Context.Request.Browser.Tables) –

관련 문제