ServiceStack AppHostHttpListenerBase 无法连接到远程服务器

本文关键字:服务器 连接 AppHostHttpListenerBase ServiceStack | 更新日期: 2023-09-27 18:34:12

我正在我的应用程序上进行一些功能测试,我想我已经非常接近了。我的问题是,当我运行第一个测试时,我收到错误。

无法连接到远程服务器。

预期:正常
但被:0

我可以确认,如果我在断言上放置断点,然后尝试在浏览器中点击BaseUrl,则找不到它。

这是我的测试。

[Test]
public void MyTestTest ()
{
    var client = new RestClient( ServiceTestAppHostBase.BaseUrl );
    // client.Authenticator = new HttpBasicAuthenticator( NUnitTestLoginName, NUnitTestLoginPassword );
    var request = new RestRequest( "/users/", Method.GET );
    request.RequestFormat = DataFormat.Json;
    var response = client.Execute( request );
    // do assertions on the response object now
    Assert.That( response.StatusCode, Is.EqualTo( HttpStatusCode.OK ) );
}

AppServerTestSetup看起来像这样

[SetUpFixture]
public class AppServerTestSetup
{
    ServiceTestAppHostBase _appHost;
    [SetUp]
    public void SetUp()
    {
        _appHost = new ServiceTestAppHostBase();
        _appHost.Init();
        _appHost.Start(ServiceTestAppHostBase.BaseUrl);
    }
    [TearDown]
    public void TearDown()
    {
        _appHost.Dispose();
    }
}

ServiceTestAppHostBase看起来像这样。

public class ServiceTestAppHostBase : AppHostHttpListenerBase
{
    public const string BaseUrl = "http://localhost:8082/";
    public ServiceTestAppHostBase () : base( "OurApp.AppServer", typeof( UserServiceInterface ).Assembly ) { }
    public override void Configure ( Container container )
    {
        JsConfig.EmitCamelCaseNames = true;
        SetConfig( new EndpointHostConfig
        {
            MapExceptionToStatusCode = {
                { typeof( NotFoundException ), 404 }, // Map exception to 404 not found http response.
                { typeof( SystemAccountChangeException ), 405 } // Map exception to 405 method not allowed.
            }
        } );
        // Shared Container Registration
        AppHostContainerRegistrations.Register( container );
        // Setup the database
        var migrationRunner = container.Resolve<IMigrationRunner>();
        migrationRunner.CreateDatabase();
        migrationRunner.RunAll();
    }
}

注意:我也在主应用程序中使用该AppHostContainerRegistrations,并且它正在工作。我还验证了它是否在测试设置中运行。

AppHostContainerRegistrations(供参考)如下所示。

public class AppHostContainerRegistrations
{
    public static void Register(Container container)
    {
        // IOC Registration
        // Register base connection config
        var dbConnection = ConfigurationManager.ConnectionStrings["databaseConnection"];
        var databaseName = ConfigurationManager.AppSettings["databaseName"];
        // Register Sqlserver DbProvider
        container.Register<IDbConnectionProvider>( containr => new DbConnectionProvider( dbConnection.ConnectionString, dbConnection.ProviderName ) );
        container.Register<IDbProvider>( containr => new DbProvider( containr.Resolve<IDbConnectionProvider>(), databaseName ) );
        // Register repositories
        container.RegisterAs<DatabaseVersionRepository, IDatabaseVersionRepository>();
        container.RegisterAs<UserRepository, IUserRepository>();
        container.RegisterAs<GroupRepository, IGroupRepository>();
        container.RegisterAs<DeviceRepository, IDeviceRepository>();
        container.RegisterAs<SecuritySettingsRepository, ISecuritySettingsRepository>();
        // Register services
        container.RegisterAs<UserService, IUserService>();
        container.RegisterAs<GroupService, IGroupService>();
        container.RegisterAs<SecuritySettingsService, ISecuritySettingsService>();
        // Register everything else
        container.RegisterAs<PasswordHasher, IPasswordHasher>();
        container.RegisterAs<MigrationRunner, IMigrationRunner>();
        container.Register( new UserModel { Id = new Guid( "6C83DDEC-5E58-4F28-BDE2-61EBF1B49691" ) } );
    }
}
我们这样做进行

Db 设置的原因是,我们在 App.Configuration 中只有一个连接字符串和数据库名称,并且在部署期间我们依赖转换来设置数据库。

任何人都可以帮我解决这个问题吗?

ServiceStack AppHostHttpListenerBase 无法连接到远程服务器

在与@mythz进行了长时间的对话后,事实证明VS必须在管理模式下运行才能运行"AppHostHttpListenerBase"。

从终端运行 ./build 时,我还必须以管理员身份运行 Powershell。