Развертывание службы WCF на Azure, таймаут при попытке доступа к базе данных

У меня есть первый проект «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);
}

Я создал проект «Cloud» и 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, метод «Hello» возвращает правильное значение. Это связано с другим методом. В app.config у меня есть это :


    
        
    



    

Ошибка :

System.TimeoutException : The request channel timed out while waiting for a reply after 00:00:59.7138476. Increase the timeout value passed to the call to Request or increase the SendTimeout value on the Binding. The time allotted to this operation may have been a portion of a longer timeout. ----> System.TimeoutException : The HTTP request to 'http://MyProject.azurewebsites.net/Service1.svc' has exceeded the allotted timeout of 00:00:59.9270000. The time allotted to this operation may have been a portion of a longer timeout. ----> System.Net.WebException : The operation has timed out MyProject.Azure.Tests\Service References\MyProjectServiceAzure\Reference.cs(487, 0) : MyProject.Azure.Tests.PointageServiceAzure.Service1Client.MyMethod(String login, String password) MyProject.Azure.Tests\AzureTests.cs(18, 0) : MyProject.Azure.Tests.AzureTests.Test()

2
nl ja de

3 ответы

Вы пытались установить свой MaxReceivedMessageSize и т. Д. В свой web.config?

See Here

0
добавлено
Просто попробовал сейчас, никаких изменений. См. Обновление 2 (попытка публикации дополнительной информации)
добавлено автор Kris-I, источник

Это не ответ на ваш вопрос. Это решение реальной проблемы, с которой вы сталкиваетесь :)

Вы на самом деле не пишете единичный тест, а тест интеграции.

Вы должны спросить себя, что вы действительно хотите проверить. Насколько я вижу, вы тестируете подключение к своей службе 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, которые будут проверять, хорошо ли эта оболочка ведет себя как прокси.

0
добавлено
Я знаю это, это работа с методом, возвращающим только строку. Проблема заключается в том, когда метод должен получить доступ к базе данных.
добавлено автор Kris-I, источник
Я перефразировал вопрос, надеюсь, что это ясно. Благодарю.
добавлено автор Kris-I, источник
Какой метод? Точнее, пожалуйста.
добавлено автор dzendras, источник
Независимо от того ... Ваша бизнес-логика НЕ ​​ДОЛЖНА знать о точном источнике данных! BL должен работать на провайдерах (интерфейсы должны быть четкими). Ваша «производственная» реализация считывает записи БД, а в модульных тестах вы издеваетесь над таким интерфейсом.
добавлено автор dzendras, источник
1. Для чего вам нужна эта фабрика? Это не дает никакой ценности. Кроме того, блокировка на этом/GetType() полностью небезопасна и должна быть запрещена. 2. В ваших модульных тестах для MyProjectRepo вы не должны использовать эту фабрику. Вместо этого создайте репо с помощью конструктора. Ввод фабрики там заставляет тест протестировать фактически 2 вещи: само репо и завод. 3. С предоставленным кодом вы по-прежнему не можете избавиться от соединения с БД, предполагая, что Context использует БД. 4. Избегайте статических классов для заводов. И они, и одиночки - это чистое зло - в ваших модульных тестах вы не можете переключать зависимости - например. чтобы избавиться от БД.
добавлено автор dzendras, источник

Вы проверили правила брандмауэра Azure? Вы должны «разрешить» доступ службы WCF к базе данных SQL Azure. Из памяти есть флажок, который нужно проверить, что позволяет доступному хосту доступ к базе данных, поскольку по умолчанию это не проверяется.

0
добавлено
В правилах брандмауэра есть IP дома и WINDOWS AZURE SERVICES.
добавлено автор Kris-I, источник
QA — вакансии и аналитика рынка вакансий
QA — вакансии и аналитика рынка вакансий
5 668 участник(ов)

Вакансии и поиск работы в сфере QA. Вопросы: @qa_ru Про деньги: @qa_fin При размещении вакансии указывать: - должность - компанию - требования к кандидату - условия и ЗП хэштеги: #город #типзанятости

QA — русскоговорящее сообщество
QA — русскоговорящее сообщество
3 625 участник(ов)

Общаемся про все виды тестирования и его автоматизацию. Без мата, грубостей и провокаций. События: @qaevents Вакансии: @qa_jobs Автоматизаторы: @qa_automation Слухи про компании: @qa_bad_company

DotNetRuChat
DotNetRuChat
2 992 участник(ов)

Чат русскоязычного .NET сообщества http://dotnet.ru/ Вам могут быть интересны: @dotnetchat, @cilchat, @fsharp_chat, @pro_net, @xamarin_russia, @microsoftstackjobs, @uwp_ru Флуд в @dotnettalks

QA juniors
QA juniors
2 720 участник(ов)

Добро пожаловать в чат джуниоров QA! Общаемся обо всём, что связано с тестированием и не только :) В чате царит дружественная атмосфера, поэтому общаемся без мата, грубостей. @qa_automation - автоматизация @serious_tester - для тестировщиков и QA

QA - Bad Company!
QA - Bad Company!
2 602 участник(ов)

Позитив и негатив про компании или курсы, куда не стоит идти работать или учиться, а куда стоит. За пиратский контент - бан. @qa_fin о деньгах Русскоговорящее сообщество: @qa_ru Флудилка: @qaFlood Вакансии: @qa_jobs Финансы: @qa_fin

QA — Автоматизация
QA — Автоматизация
2 434 участник(ов)

1. Обсуждение технологий автоматизированного тестирования 2. Помощь начинающим Ru-сообщество: @qa_ru Джуночат: @qajuniors Вакансии: @qa_jobs Финансы: @qa_fin Митапы и события: @qaevents Паблики: @serious_tester, @automation_remarks, @atinfo

Microsoft Stack Jobs
Microsoft Stack Jobs
1 788 участник(ов)

Work & freelance only Microsoft Stack. Feed https://t.me/Microsoftstackjobsfeed Чат про F#: @Fsharp_chat Чат про C#: @CSharpChat Чат про Xamarin: @xamarin_russia Чат общения:@dotnettalks

QA - Finance
QA - Finance
1 347 участник(ов)

Чат о деньгах тестировщиков. ЗП, релокейты,оферы. @qa_bad_company - обсуждение компаний/курсов и карьерного роста для QA @qa_automation - авто QA Холивары, политика, религия-бан Реклама, спам, оскорбления - бан Для флуда используйте другой чат

pro.net
pro.net
710 участник(ов)

Обсуждение .NET Framework и всего, что с ним связано. Правила: не флудить не по теме, уважать ваших коллег и никакой рекламы (объявления о вакансиях можно согласовать с @AlexFails). Флудилка: @dotnettalks Участник @proDOT

Microsoft Developer Community Chat
Microsoft Developer Community Chat
584 участник(ов)

Чат для разработчиков и системных администраторов Microsoft Developer Community. __________ Новостной канал: @msdevru __________ Баним за: оскорбления, мат, рекламу, флуд, флейм, спам, NSFW контент, а также большое количество оффтоп тем. @banofbot

.NET Talks: Force Push Masters
.NET Talks: Force Push Masters
490 участник(ов)

Свободный чат .NET разработчиков. Правила: t.me/dotnettalks/56823 Вам могут быть интересны: @dotnetruchat, @dotnetchat, @cilchat, @fsharp_chat, @pro_net, @dotnetgroup, @xamarin_russia, @microsoftstackjobs, @uwp_ru http://combot.org/chat/-1001128250813

.NET Chat Убежище
.NET Chat Убежище
246 участник(ов)

Чат .NET разработчиков под эгидой MSK/SPB .NET Community Group Вам могут быть интересны: @fsharp_chat, @dotnetruchat, @cilchat, @xamarin_russia, @microsoftstackjobs, @dotnetgroup Флуд в @dotnettalks

.NET CIL Chat
.NET CIL Chat
54 участник(ов)

.NET CIL (aka IL aka MSIL)