1

Silverlight アプリケーション内に WCF プロジェクトがあります。WCF プロジェクトは Entity Framework を使用してデータベースから読み取ります。行を反映するオブジェクトのリストを Silverlight アプリケーションに渡したいと考えています。これがサービス コントラクトです。

[ServiceContract]
    public interface IGetToolboxItemsService
    {
        [OperationContract]
        List<Control> GetToolboxItems();

        [OperationContract]
        string ReturnWord(string word);
    }

ここに作業を行うクラスがあります

public class GetToolboxItemsService : IGetToolboxItemsService
    {
        public List<Control> GetToolboxItems()
        {
            SilverlightScreenDesignerEntities ent = new SilverlightScreenDesignerEntities();
            List<Control> controls = new List<Control>();
            controls = ent.Controls.ToList();
            return controls;
        }

        public string ReturnWord(string word)
        {
            return word;
        }
    }

これは、クライアントでサービスを呼び出す方法です。

ToolboxServiceReference.GetToolboxItemsServiceClient proxy = new ToolboxServiceReference.GetToolboxItemsServiceClient();
            proxy.GetToolboxItemsCompleted += proxy_GetToolboxItemsCompleted;
            proxy.GetToolboxItemsAsync();

完了したイベントがここにあります。

void proxy_GetToolboxItemsCompleted(object sender, ToolboxServiceReference.GetToolboxItemsCompletedEventArgs e)
        {
            var data = e.Result;
        }

サービスをデバッグすると、データベースに実行され、Controls予想されるリストが返されますが、クライアントからコントロールのリストを取得しようとするとエラーメッセージが表示されます。

The remote server returned an error: NotFound

それでも、単純な戻り値を試してみると、サービスは正常に機能し、何も壊れません。オブジェクトを通過するために必要な追加の手順はありますか?

ここに web.config があります。

<?xml version="1.0" encoding="utf-8"?>
<!--
  For more information on how to configure your ASP.NET application, please visit
  http://go.microsoft.com/fwlink/?LinkId=169433
  -->
<configuration>
  <configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>
  <system.web>
    <compilation debug="true" targetFramework="4.0">
      <assemblies>
        <add assembly="System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
      </assemblies>
    </compilation>
  </system.web>
  <system.serviceModel>
  <behaviors>
      <serviceBehaviors>
        <behavior name="">
          <dataContractSerializer maxItemsInObjectGraph="2147483647"/>
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    </system.serviceModel>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="v11.0" />
      </parameters>
    </defaultConnectionFactory>
  </entityFramework>
  <connectionStrings>
    <add name="ModelContainer" connectionString="metadata=res://*/Model.csdl|res://*/Model.ssdl|res://*/Model.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=MOBINOTE135;initial catalog=BankManager;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
    <add name="SilverlightScreenDesignerEntities" connectionString="metadata=res://*/Model.csdl|res://*/Model.ssdl|res://*/Model.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=MOBINOTE135;initial catalog=SilverlightScreenDesigner;integrated security=True;multipleactiveresultsets=True;application name=EntityFramework&quot;" providerName="System.Data.EntityClient" />
  </connectionStrings>
</configuration>
4

2 に答える 2

0

問題は、サービス参照が範囲外になっていることだと思います。私はビジュアルスタジオにアクセスできませんが、あなたはこのようなことをしたいと思っています.

//declare the service outside of the calling routine
ToolboxServiceReference.GetToolboxItemsServiceClient proxy;

private void GetToolboxItems
{
ToolboxServiceReference.GetToolboxItemsServiceClient proxy = new ToolboxServiceReference.GetToolboxItemsServiceClient();
            proxy.GetToolboxItemsCompleted += proxy_GetToolboxItemsCompleted;
            proxy.GetToolboxItemsAsync();
)

void proxy_GetToolboxItemsCompleted(object sender, ToolboxServiceReference.GetToolboxItemsCompletedEventArgs e)
        {
            var data = e.Result;
            proxy.close //now close the service
        }
于 2013-10-28T20:33:39.977 に答える
0

コントロールはユーザー定義クラスですか? はいの場合は、wcf サービスがシリアル化できるようにマークする必要があります。

[DataContract]
[Serializable]
public class Cat
{
[DataMember]
public int Age {get;set;}
}
于 2013-10-28T16:36:14.167 に答える