Dobrý den. Navazuji na toto téma: http://www.vbnet.cz/forum-tema--5320-asp... Prozatím jsem provedl: 1. Vytvoření webové služby v rámci webové aplikace s níže uvedenou konfigurací. Mám databázi s přihlašovacími údaji a nadefinovaný MembershipProvider, který zprostředkovává ověření uživatele.
<connectionStrings>
<remove name="LocalSqlServer"/>
<add name="LocalSqlServer"
connectionString="Data Source=sql.mujprovider.cz;
Initial Catalog=DbName;Persist Security Info=True;
User ID=Uzivatel;Password=Heslo"
providerName="System.Data.SqlClient" />
</connectionStrings>
<system.web>
<authentication mode="Forms">
<forms loginUrl="Login.aspx"/>
</authentication>
<authorization>
<!--<deny users="?"/>-->
</authorization>
<roleManager enabled="true" />
<membership defaultProvider="SqlProvider"
userIsOnlineTimeWindow="60">
<providers>
<remove name="AspNetSqlProvider"/>
<clear/>
<add name="SqlProvider"
type="System.Web.Security.SqlMembershipProvider"
connectionStringName="LocalSqlServer"
applicationName="/"
enablePasswordRetrieval="true"
enablePasswordReset="true"
requiresQuestionAndAnswer="false"
requiresUniqueEmail="false"
minRequiredPasswordLength="4"
minRequiredNonalphanumericCharacters="0"
passwordFormat="Clear"/>
</providers>
</membership>
</system.web>
V rámci této aplikace jsem připravil jednoduchou wbovou službu, která se jen zaloguje, že byla spuštěná.
Imports System.Web
Imports System.Web.Services
Imports System.Web.Services.Protocols
<WebService(Namespace:="http://test-service.aspone.cz/")> _
<WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Public Class TestWebService
Inherits System.Web.Services.WebService
Dim UspesneZalogovano As Boolean
<WebMethod()> _
Public Function SpustitZapisDoLogu() As String
UspesneZalogovano = False
Call ZapisDoLogu()
If UspesneZalogovano Then
Return "Ok"
Else
Return "Chyba"
End If
End Function
Private Sub ZapisDoLogu()
Dim Adresar As String = Server.MapPath("~/App_Data/")
Dim enc As System.Text.Encoding = System.Text.Encoding.GetEncoding("windows-1250")
Dim sw As New System.IO.StreamWriter(Adresar & "logWebService.txt", True, enc)
sw.WriteLine(Now)
sw.Close()
UspesneZalogovano = True
End Sub
End Class
Důležité je, že ve web.config je zatím zakomenována autorizace, takže webová služba je dostupná i bez přihlášení. 2. Pro testování jsem vytvořil druhou webovou aplikaci (http://ces.aspone.cz/), která volá webovou službu z první aplikace. Ve VWD menu jsem dal Website - Add Web Reference ... a zadal příslušnou URI 'http://test-service.aspone.cz/TestWebSer...'. Web.config druhé aplikace + volání webové služby po kliknutí na tlačítko:
<appSettings>
<add key="cz.aspone.test_service.TestWebService" value="http://test-service.aspone.cz/TestWebService.asmx"/>
</appSettings>
<connectionStrings/>
<system.web>
<customErrors mode="Off"/>
<compilation debug="true"/>
<authentication mode="Windows"/>
</system.web>
Imports cz.aspone.test_service
Partial Class _Default
Inherits System.Web.UI.Page
Protected Sub VolejSluzbu(ByVal sender As Object, ByVal e As System.EventArgs)
Dim ws As New TestWebService
Me.labInfo.Text = "Služba zavolána " & Now & " s výsledkem: " & ws.SpustitZapisDoLogu()
End Sub
End Class
No a dál jsem se zatím nedostal, potřeboval bych poradit, jak do toho zamontovat tu autentizaci. První krok bych ještě věděl, ve web.config první aplikace zakážu přístup anonymním uživatelům (viz nahoře, jen to odkomentuju). Jaké ale další nastavení? Doufám, že je to "jen" otázka nastavení ve web.config. Hledal jsem na webu, ale z těch všech WSE a WCF jsem docela zmatený, nevím co je pro mé potřeby nejvhodnější či nejjednodušší. Potřeboval bych názorný příklad. Ani si nejsem jistý, jestli můžu pokračovat na základě výše uvedeného, nebo jestli jsem neměl tvořit jiný druh webové služby... Pokud byste mě postrčili dál v řešení, budu vděčný. Děkuji, Jiří.
|