2

私は最初のプロジェクト「MyProject.Core」を持っています、私はEDMXを持っています:

レポクラス:

class MyProjectRepo : IMyProjects
{
    public int NumberOfUser()
    {
        return new context().User.Count();
    }

    public string HelloWorld()
    {
        return "Hello World!";
    }
}

インターフェース:

public interface IMyProjects
{
    int NumberOfUser();
    string HelloWorld();
}

工場:

public static class MyProjectFactory
{
    private static IMyProjects _returnedObject;

    public static IMyProjects GetObject()
    {
        lock (typeof(MyProjectFactory))
        {
            _returnedObject = new MyProjectRepo();
        }
        return _returnedObject;
    }
}

テストプロジェクト""MyProject.Core.Tests "(テストに合格):

[Test]
public void NumberOfUser_Test()
{
    var number = MyProjectFactory.GetObject().NumberOfUser();
    Assert.AreEqual(1, number);
}

[Test]
public void HelloWorld_Test()
{
    var hello = MyProjectFactory.GetObject().HelloWorld();
    Assert.AreEqual("Hello World!", hello);
}

「クラウド」プロジェクトとWCFServiceWebRoleを作成しました。

WCFServiceWebRoleには、次のものがあります。

public class Service1 : IService1
{
    public int NumberOfUser()
    {
        return MyProjectFactory.GetObject().NumberOfUser();
    }

    public string Hello()
    {
        return MyProjectFactory.GetObject().HelloWorld(); 
    }
}

[ServiceContract]
public interface IService1
{
    [OperationContract]
    int NumberOfUser(string login, string password);

    [OperationContract]
    string Hello();
}

WCFをテストするプロジェクトであるmethode"Hello"は、正しい値を返します。それは私が問題を抱えている他の方法です。app.configには、次のものがあります。

<bindings>
    <basicHttpBinding>
        <binding name="BasicHttpBinding_IService1" />
    </basicHttpBinding>
</bindings>

<client>
    <endpoint address="http://myproject.azurewebsites.net/Service1.svc"
        binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IService1"
        contract="myprojectServiceAzure.IService1" name="BasicHttpBinding_IService1" />
</client>

エラー :

System.TimeoutException:00:00:59.7138476以降の応答を待っている間に要求チャネルがタイムアウトしました。Requestの呼び出しに渡されるタイムアウト値を増やすか、BindingのSendTimeout値を増やします。この操作に割り当てられた時間は、より長いタイムアウトの一部であった可能性があります。----> System.TimeoutException:「http://MyProject.azurewebsites.net/Service1.svc」へのHTTPリクエストが、割り当てられたタイムアウト00:00:59.9270000を超えました。この操作に割り当てられた時間は、より長いタイムアウトの一部であった可能性があります。----> System.Net.WebException:操作がタイムアウトしましたMyProject.Azure.Tests \ Service References \ MyProjectServiceAzure \ Reference.cs(487、0):MyProject.Azure.Tests.PointageServiceAzure.Service1Client.MyMethod(String login 、

4

3 に答える 3

0

web.configでMaxReceivedMessageSizeなどを設定しようとしましたか?

こちらをご覧ください

于 2012-12-28T15:05:07.727 に答える
0

それはあなたの質問に対する答えではありません。それはあなたが直面している本当の問題の解決策です:)

あなたは実際には単体テストを書いているのではなく、統合テストを書いています。

本当に何をテストしたいのかを自問する必要があります。私の知る限り、あなたは WCF サービスへの接続をテストしていますが、それは単体テストの目的ではありません。

私が提案するのは、関心の分離です。WCF は、リモート通信を許可する唯一のプロキシです。したがって、コア ビジネス ロジックの一部ではありません。ビジネス ロジックはできるだけ純粋にする必要があります。取り除くのが難しいかもしれない不要な依存関係はありません。WCF を伝書鳩 (;) に置き換える必要がある場合は、WCF を認識しないロジックを使用して、ロジック コードにまったく触れる必要はありません。

これが私のアイデアの例です:

interface IService //pure business logic, no knowledge of WCF
{
    double Add(double a, double b);
}

class NonWcfService : IService //pure business logic
{
    public double Add(double a, double b)
    {
        return a + b;
    }
}

[ServiceContract]
interface IServiceContract //wcf-bound (because of the attributes)
{
    [OperationContract]
    double Add(double a, double b);
}

class WcfService : IServiceContract //wcf-bound delegates calls to pure business logic
{
    IService sourceService;

    public WcfService(IService sourceService)
    {
        this.sourceService = sourceService; 
    }

    public double Add(double a, double b)
    {
        return sourceService.Add(a,b);
    }
}

サービスに接続しなくても、NonWcfService の単体テストを記述できるようになりました。これは、単体テストがはるかに高速に実行されることを意味します。

このラッパーがプロキシとして適切に動作するかどうかを確認する WcfService の単体テストを作成することもできます。

于 2012-12-29T16:27:47.027 に答える
0

Azure ファイアウォール ルールを確認しましたか? SQL Azure データベースへの WCF サービス アクセスを「許可」する必要があります。メモリから、チェックする必要があるチェックボックスがあります。これにより、ホストされたアプリケーションがデータベースにアクセスできるようになります。これはデフォルトではチェックされていないためです。

于 2012-12-28T11:31:36.667 に答える